linux中有许多很好用的命令,但是相对于windows中的cmd就没有那么丰富的命令,于是我就自己来实现一些命令吧。
实现浏览文件命令:cat
cat命令用于浏览一个文件文件的内容,在Linux中使用方式如下:cat 文件名
,例如:cat replaceAll.java
,效果如下图。
windows的dos命令行中也有相似的命令:type
,type.replaceAll.java
不过我有点不习惯使用这个命令,下面自己来实现一个cat命令。做法是使用Scanner类扫描这个文件,然后一行一行的读出,然后一行一行的打印即可。
package command.line.cat;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Cat
{
public static void main(String[] args)
{
String currunntPath=System.getProperty("user.dir");
String parameter=args[0].trim();
if(!parameter.equals("")&¶meter!=null)
{
File file=new File(currunntPath+"\\"+parameter);
if(file.exists()&&file.isFile())
{
try
{
Scanner scanner=new Scanner(file);
scanner.useDelimiter("\r\n");
String line=null;
while(scanner.hasNext())
{
line=scanner.next();
System.out.println(line);
}
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
然后打包成可执行jar
包,Copy.jar
,然后再写一个bat文件cat.bat来调用该Copy.jar
即可。
@echo off
::%cd%是当期的工作目录,也就是调用myclip的路径
::%1是myclip的第一个命令行参数
java -jar D:\dev\java\my\runable\ls\Cat.jar %1
上面的%1
是传入到cat.bat
的第一个命令行参数,也就是要浏览的文件名,这里默认是浏览当前目录下的文件,然后cat.bat
把接收到的这个命令行参数传给Cat.jar
,Cat.jar接收这个命令行参数(文件名),然后判断它是不是一个文件,如果是文件的话就把它打印出来。
完成的效果如下:
现在可以当然目录下输入 cat cat.bat
,浏览cat.bat
这个文件中的内容。注意不好混淆,第一个cat
是可执行脚本,而第二个cat.bat
只是作为批处理脚本的参数。运行效果如下。
不过现在cat这么命令这能在当前目录下运行,不能在所有不了下执行,这个时候需要把cat这个命令(程序)的路径配置到Path环境变量中,这样就可以在任何地方使用这个命令了。
好的,配置好环境变量后,就可在其他目录下执行这个我们做好的cat命令了。
例如:在Cat.java的目录中输入cat Cat.java
,效果如下。
实现列表命令:ls
基本的ls命令可以列出文件或者目录,在Linux系统中效果如下:
现在来用批处理脚本和java实现这个功能,当然这里肯定没用Linux中的ls命令那样强大。不过勉强可以看看吧。
package command.line;
import java.io.File;
public class List
{
public static void main(String[] args)
{
String curruntPath=System.getProperty("user.dir");
File dir=new File(curruntPath);
String[] filelist=dir.list();
for (String string : filelist)
{
System.out.printf("%-20s",string);
}
}
}
可以看到这个代码真是十分的简单粗暴,就是对其那些不好弄,我在想怎么用java来获取控制台的宽度,然后根据宽度和文件名的长度来调整打印的样式。这个我还没想好,就先凑合着用上面的吧。
同样编写调用的命令ls.bat:
@echo off
java -jar D:\dev\java\my\runable\ls\List.jar
因为ls命令和上面的cat命令在同一个目录下面,在上面的cat命令中已经配置好Path环境变量了,这里就不再配置了。记得要配置path环境变量,不然这个命令在别的地方将无法使用。
实现复制命令:cp
Linux中cp命令用来复制文件,用法:cp 文件1 文件2
,这样会把文件1中的内容,复制到文件2中。使用效果如下。
现在在window的dos命令行中来事项这个命令,我这里的事项方式是,使用Scanner类扫描文件1
,然后一行行的读取出来。在重定向到文件2
中。文件1和文件2通过命令行参数传入到java程序中。
package command.line;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;
public class Copy
{
public static void main(String[] args)
{
if(!args[0].equals("")&&!args[1].equals("")&&args[0]!=null&&args[1]!=null)
{
//获取当前工作目录
String curruntPath=System.getProperty("user.dir");
String fileStr=args[0];
String copyToStr=args[1];
File infile=new File(curruntPath+"\\"+fileStr);
File outFile=new File(curruntPath+"\\"+copyToStr);
PrintStream fileOut=null;
PrintStream out=System.out;
if(infile.exists()&&infile.isFile())
{
try
{
fileOut=new PrintStream(outFile);
Scanner scanner=new Scanner(infile);
scanner.useDelimiter("\r\n");
System.setOut(fileOut);
String line=null;
while(scanner.hasNext())
{
line=scanner.next();
//scanner.next()
System.out.println(line);
}
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
if(fileOut!=null)
{
fileOut.close();
}
System.setOut(out);
}
}
else
{
System.out.println("参数1错误"+infile.getAbsolutePath()+" 不是一个文件");
}
}
else
{
System.out.println("参数错误!");
}
}
}
对应的bat文件:cp.bat
:
@echo off
::%1是的第一个命令行参数表示源文件,%2表示目标文件
java -jar D:\dev\java\my\runable\ls\Copy.jar %1 %2
现在目录下的文件为:
现在使用我们写的cp命令,才复制一下ls.bat
,到新文件ls1.bat
中:cat ls.bat ls1.bat
,执行效果如下。
可以看到我们的复制命令没有问题。
实现删除命令rm
在Linux中使用 rm 文件名
可以删除一个文件,如下所示。
现在我们用批处理脚本rm.bat
和java程序Remove.jar
来实现这个删除操作。
rm.bat:
@echo off
java -jar D:\dev\java\my\runable\ls\Remove.jar %1
执行效果如下
实现移动命令:mv
Linux中可以使用mv命令把一个文件中的内容移动到另一个文件中,效果跟重名查不多,我这里的实现方式是,把上面的复制和删除操作结合起来,例如mv 文件1 文件2
先新建文件1,然后把文件1的内容拷贝到文件2中,拷贝完成后,再把文件1删除掉就行了。
Move.java
package command.line;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;
public class Move
{
public static void main(String[] args)
{
if(!args[0].equals("")&&!args[1].equals("")&&args[0]!=null&&args[1]!=null)
{
//获取当前工作目录
String curruntPath=System.getProperty("user.dir");
String fileStr=args[0];
String copyToStr=args[1];
File infile=new File(curruntPath+"\\"+fileStr);
File outFile=new File(curruntPath+"\\"+copyToStr);
PrintStream fileOut=null;
PrintStream out=System.out;
if(infile.exists()&&infile.isFile())
{
try
{
if(!outFile.exists())
{
outFile.createNewFile();
}
//完成文件的复制操作
fileOut=new PrintStream(outFile);
Scanner scanner=new Scanner(infile);
scanner.useDelimiter("\r\n");
System.setOut(fileOut);
String line=null;
while(scanner.hasNext())
{
line=scanner.next();
//scanner.next()
System.out.println(line);
}
//先关闭scanner,不然文件无法删除
scanner.close();
// //复制完成后删除源文件
infile.delete();
// System.out.println(infile.delete());
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
if(fileOut!=null)
{
fileOut.close();
}
System.setOut(out);
}
}
else
{
System.out.println("参数1错误"+infile.getAbsolutePath()+" 不是一个文件");
}
}
else
{
System.out.println("参数错误!");
}
}
}
mv.bat
@echo off
java -jar D:\dev\java\my\runable\ls\Move.jar %1 %2
运行效果:
实现创建文件夹命令:mkdir
Java中使用File类的mkdir方法可以实现新建文件夹的操作。
package command.line;
import java.io.File;
public class MakeDir
{
public static void main(String[] args)
{
String curruntPath=System.getProperty("user.dir");
File dir=new File(curruntPath+File.separator+args[0]);
if(!dir.exists())
{
dir.mkdir();
}
}
}
mkdir.bat:
@echo off
java -jar D:\dev\java\my\runable\ls\MakeDir.jar %1
运行结果:
最后所有的上面的命令的目录位置: