Java 在cmd中实现shell命令cp,ls,cat,rm,mv,mkdir

linux中有许多很好用的命令,但是相对于windows中的cmd就没有那么丰富的命令,于是我就自己来实现一些命令吧。

实现浏览文件命令:cat

cat命令用于浏览一个文件文件的内容,在Linux中使用方式如下:cat 文件名,例如:cat replaceAll.java,效果如下图。
这里写图片描述
windows的dos命令行中也有相似的命令:typetype.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("")&&parameter!=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

运行结果:
这里写图片描述
最后所有的上面的命令的目录位置:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值