有许多重复性的任务,你可能需要不时地完成。一个例子是,如果你需要定期对本地计算机上的文件进行修改。这些操作可以包括复制、移动、删除或归档文件。
与其手动完成这些重复的任务,你可以使用一个程序将其自动化。你可以用一个脚本文件来完成,使用许多可用的编程语言之一,如Java。
今天的视频:makeuseof
如何设置Java应用程序
首先,确保你安装了Oracle的Java SE开发工具包。然后创建一个简单的Java控制台应用程序。
-
在你电脑的任何地方创建一个名为SimpleScript.java的文件。
-
在文本编辑器或IDE中打开该文件。
-
在文件的顶部,导入IOException类。这将允许你在试图执行某些功能时处理文件或IO相关的异常,如复制文件。
import java.io.IOException; -
下面,添加主Java类和main方法。main方法将在你启动应用程序时运行。现在,只是打印一条信息以确保程序正确运行。之后,你可以用下面的任何一个例子来替换main函数的内容,以测试它们。
class SimpleScript { public static void main(String args[]) throws IOException { System.out.println("Simple Console App"); } } -
要运行这个脚本,首先要用命令行导航到你的java文件的位置。例如,如果你把你的文件存放在桌面上,命令就是。
cd Desktop -
保存文件,并使用javac 命令来编译它。每次你对文件进行修改时,你都需要用javac重新编译它。
javac SimpleScript.java -
运行应用程序。
java SimpleScript
如何访问你电脑中的本地文件
你可以使用文件类以编程方式访问目录中的文件。
-
在与你的java文件相同的目录中创建一个新的文件夹,称为NewDirectory。在其中创建一些文件--如果你愿意,它们可以是空的文本文件。
-
在你的Java应用程序的顶部,导入文件类。这将允许你访问与操作系统文件和目录有关的某些方法和其他功能。
import java.io.File; -
使用新文件夹的相对路径创建一个新的文件对象。
File directory = new File("NewDirectory"); -
使用listFiles()函数来访问该目录中所有文件的列表。
File[] listOfFiles = directory.listFiles(); for (File file : listOfFiles) { System.out.println(file); } -
使用javac和java命令重新编译并运行该程序。
如何将文件复制到另一个位置
有多种方法可以复制文件。一种常见的复制文件的方法(特别是在Java 7和java.nio.file包之前),是使用FileInputStream或FileOutputStream类。
- FileInputStream 类允许你打开一个输入流,从一个文件中读取字节。
- FileOutputStream 类允许你打开一个输出流,将字节写入一个文件。
当复制文件时,我们的想法是打开一个输入和输出流。使用这些流,你将在源位置读取文件的字节,然后将这些字节写到新的位置。
这个例子将使用一个较新的实现来复制文件,通过使用java.nio.file包的Files类中的copy()函数。要使用java.nio.file包,你必须安装Java 7或更高版本。
-
在文件的顶部,从java.nio.file包中导入文件和路径类。
import java.nio.file.Files;import java.nio.file.Paths; -
在与你的java文件相同的目录中添加一个名为FileToCopy.txt的新文件。在main()函数中,声明该文件的相对路径。
String copySource = "FileToCopy.txt"; -
创建一个新的文件夹,称为NewFolder,将文件复制到。在main()函数中添加到目的地的相对路径。
String copyDestination = "NewFolder/FileToCopy.txt"; -
使用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.");} -
使用javac和java命令重新编译并运行该程序。
-
打开新文件夹,确认程序已经复制了你的文件。
如何移动文件或文件夹
你可以使用Files类中的**move()**函数来移动文件或文件夹,该类也是java.nio.file包的一部分。
-
在与你的Java文件相同的文件夹中创建一个名为DirectoryToMove的新文件夹。
-
在同一文件夹中创建第二个文件夹,称为NewDirectory。这就是程序将移动原始文件夹的地方。
-
为你要移动的目录和你要移动的位置创建文件对象。
File moveSource = new File("DirectoryToMove");File moveDestination = new File("NewDirectory/DirectoryToMove"); -
使用**Files.move()**方法将文件从源文件移动到目的地。
try { Files.move(moveSource.toPath(), moveDestination.toPath()); System.out.println("Directory moved successfully.");} catch (IOException ex) { ex.printStackTrace();} -
使用javac和java命令重新编译并运行程序。
-
打开NewDirectory文件夹,可以看到 "DirectoryToMove "文件夹已经在里面了。
如何删除一个文件
你可以使用文件类中的**delete()**方法来删除一个特定的文件。
-
创建一个名为FileToDelete.txt的文件。将该文件保存在与你的Java应用程序相同的文件夹中。
-
为你要删除的文件创建一个新的文件对象。然后,使用其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.");}
如何压缩文件
有很多方法可以创建一个包含多个压缩文件的压缩档案。这个例子将使用ZipOutputStream和ZipEntry类。
-
在文件的顶部导入必要的ZipOutputStream、ZipEntry和FileOutputStream类。
import java.util.zip.ZipOutputStream;import java.util.zip.ZipEntry;import java.io.FileOutputStream; -
创建压缩文件和一个代表你想压缩的文本文件的zipEntry对象列表。这个例子将生成新的文本文件,但你可以在以后修改脚本以包括已经存在的文本文件。
File zipFile = new File("ZippedFile.zip");ZipEntry[] zipEntries = new ZipEntry[] {new ZipEntry("zipFile1.txt"), new ZipEntry("zipFile2.txt"), new ZipEntry("zipFile3.txt")}; -
创建zip输出流,将数据写入zip文件。
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile)); -
将每个文件添加到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(); -
使用javac和java命令重新编译并运行该程序。你会看到新的zip文件夹出现在你的文件目录中。
用Java实现简单任务的自动化
你可以使用脚本以编程方式完成重复的文件管理器任务。这些任务包括访问、复制、移动、删除和压缩文件。
另一种使重复性任务自动化的方法是在脚本文件中使用系统命令。在Linux和macOS上,这种文件被称为shell脚本,而Windows则将其称为批处理脚本。