如何用Java实现基本文件操作的自动化

156 阅读6分钟

有许多重复性的任务,你可能需要不时地完成。一个例子是,如果你需要定期对本地计算机上的文件进行修改。这些操作可以包括复制、移动、删除或归档文件。

与其手动完成这些重复的任务,你可以使用一个程序将其自动化。你可以用一个脚本文件来完成,使用许多可用的编程语言之一,如Java。

今天的视频:makeuseof

如何设置Java应用程序

首先,确保你安装了Oracle的Java SE开发工具包。然后创建一个简单的Java控制台应用程序。

  1. 在你电脑的任何地方创建一个名为SimpleScript.java的文件。

  2. 在文本编辑器或IDE中打开该文件。

  3. 在文件的顶部,导入IOException类。这将允许你在试图执行某些功能时处理文件或IO相关的异常,如复制文件。

    import java.io.IOException;
    
  4. 下面,添加主Java类main方法。main方法将在你启动应用程序时运行。现在,只是打印一条信息以确保程序正确运行。之后,你可以用下面的任何一个例子来替换main函数的内容,以测试它们。

    class SimpleScript {        public static void main(String args[]) throws IOException {            System.out.println("Simple Console App");       }    }  
    
  5. 要运行这个脚本,首先要用命令行导航到你的java文件的位置。例如,如果你把你的文件存放在桌面上,命令就是。

    cd Desktop
    
  6. 保存文件,并使用javac 命令来编译它。每次你对文件进行修改时,你都需要用javac重新编译它。

    javac SimpleScript.java
    
  7. 运行应用程序。

    java SimpleScript
    

如何访问你电脑中的本地文件

你可以使用文件类以编程方式访问目录中的文件。

  1. 在与你的java文件相同的目录中创建一个新的文件夹,称为NewDirectory。在其中创建一些文件--如果你愿意,它们可以是空的文本文件。

  2. 在你的Java应用程序的顶部,导入文件类。这将允许你访问与操作系统文件和目录有关的某些方法和其他功能。

    import java.io.File;
    
  3. 使用新文件夹的相对路径创建一个新的文件对象。

    File directory = new File("NewDirectory");
    
  4. 使用listFiles()函数来访问该目录中所有文件的列表。

    File[] listOfFiles = directory.listFiles();  for (File file : listOfFiles) {    System.out.println(file); }
    
  5. 使用javacjava命令重新编译并运行该程序。

如何将文件复制到另一个位置

有多种方法可以复制文件。一种常见的复制文件的方法(特别是在Java 7和java.nio.file包之前),是使用FileInputStream或FileOutputStream类。

  • FileInputStream 类允许你打开一个输入流,从一个文件中读取字节。
  • FileOutputStream 类允许你打开一个输出流,将字节写入一个文件。

当复制文件时,我们的想法是打开一个输入和输出流。使用这些流,你将在源位置读取文件的字节,然后将这些字节写到新的位置。

这个例子将使用一个较新的实现来复制文件,通过使用java.nio.file包的Files类中的copy()函数。要使用java.nio.file包,你必须安装Java 7或更高版本。

  1. 在文件的顶部,从java.nio.file包中导入文件和路径类。

    import java.nio.file.Files;import java.nio.file.Paths;
    
  2. 在与你的java文件相同的目录中添加一个名为FileToCopy.txt的新文件。在main()函数中,声明该文件的相对路径。

    String copySource = "FileToCopy.txt"; 
    
  3. 创建一个新的文件夹,称为NewFolder,将文件复制到。在main()函数中添加到目的地的相对路径。

    String copyDestination = "NewFolder/FileToCopy.txt";
    
  4. 使用copy()方法将文件从源文件复制到目的地。

    try {    Files.copy(Paths.get(copySource), Paths.get(copyDestination));} catch(Exception e) {    System.out.println("Could not copy the specs file in: " + copyDestination       + " . Check if the folder or file already exists.");}
    
  5. 使用javacjava命令重新编译并运行该程序。

  6. 打开新文件夹,确认程序已经复制了你的文件。

如何移动文件或文件夹

你可以使用Files类中的**move()**函数来移动文件或文件夹,该类也是java.nio.file包的一部分。

  1. 在与你的Java文件相同的文件夹中创建一个名为DirectoryToMove的新文件夹。

  2. 在同一文件夹中创建第二个文件夹,称为NewDirectory。这就是程序将移动原始文件夹的地方。

  3. 为你要移动的目录和你要移动的位置创建文件对象。

    File moveSource = new File("DirectoryToMove");File moveDestination = new File("NewDirectory/DirectoryToMove");
    
  4. 使用**Files.move()**方法将文件从源文件移动到目的地。

    try {    Files.move(moveSource.toPath(), moveDestination.toPath());    System.out.println("Directory moved successfully.");} catch (IOException ex) {    ex.printStackTrace();}
    
  5. 使用javacjava命令重新编译并运行程序。

  6. 打开NewDirectory文件夹,可以看到 "DirectoryToMove "文件夹已经在里面了。

如何删除一个文件

你可以使用文件类中的**delete()**方法来删除一个特定的文件。

  1. 创建一个名为FileToDelete.txt的文件。将该文件保存在与你的Java应用程序相同的文件夹中。

  2. 为你要删除的文件创建一个新的文件对象。然后,使用其delete()方法删除该文件。删除方法返回一个真或假的值,这取决于删除是否成功。

    File fileToDelete = new File("FileToDelete.txt"); if (fileToDelete.delete()) {     System.out.println("File succesfully deleted.");} else {    System.out.println("Unable to delete the file.");} 
    

如何压缩文件

有很多方法可以创建一个包含多个压缩文件的压缩档案。这个例子将使用ZipOutputStreamZipEntry类。

  1. 在文件的顶部导入必要的ZipOutputStream、ZipEntry和FileOutputStream类。

    import java.util.zip.ZipOutputStream;import java.util.zip.ZipEntry;import java.io.FileOutputStream;
    
  2. 创建压缩文件和一个代表你想压缩的文本文件的zipEntry对象列表。这个例子将生成新的文本文件,但你可以在以后修改脚本以包括已经存在的文本文件。

    File zipFile = new File("ZippedFile.zip");ZipEntry[] zipEntries = new ZipEntry[] {new ZipEntry("zipFile1.txt"),   new ZipEntry("zipFile2.txt"), new ZipEntry("zipFile3.txt")};
    
  3. 创建zip输出流,将数据写入zip文件。

    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));
    
  4. 将每个文件添加到zip文件夹中,并关闭流。

    for (ZipEntry zipEntry : zipEntries) {    out.putNextEntry(zipEntry);        StringBuilder sb = new StringBuilder();    sb.append("Content Inside Text File");                byte[] data = sb.toString().getBytes();    out.write(data, 0, data.length);    out.closeEntry();} out.close();
    
  5. 使用javacjava命令重新编译并运行该程序。你会看到新的zip文件夹出现在你的文件目录中。

用Java实现简单任务的自动化

你可以使用脚本以编程方式完成重复的文件管理器任务。这些任务包括访问、复制、移动、删除和压缩文件。

另一种使重复性任务自动化的方法是在脚本文件中使用系统命令。在Linux和macOS上,这种文件被称为shell脚本,而Windows则将其称为批处理脚本。