本节开发了一个用于复制文件的有用实用程序。在本节中,您将学习如何编写允许用户复制文件的程序。用户需要使用以下命令提供源文件和目标文件作为命令行参数:
java 复制源目标
程序将源文件复制到目标文件并显示文件中的字节数。如果源文件不存在或目标文件已存在,程序应警告用户。程序的运行示例如下图所示。
要将源文件的内容复制到目标文件,适合使用输入流从源文件读取字节,并使用输出流将字节发送到目标文件,而不管文件的内容如何。源文件和目标文件是从命令行指定的。为源文件创建一个 InputFileStream 并为目标文件创建一个 OutputFileStream。使用 read() 方法从输入流中读取一个字节,然后使用 write(b) 方法将该字节写入输出流。使用 BufferedInputStream 和 BufferedOutputStream 来提高性能。下面的代码给出了问题的解决方案。
package demo; import java.io.*; public class Copy { public static void main(String[] args) throws IOException { // Check command-line parameter usage if(args.length != 2) { System.out.println("Usage: java Copy sourceFile targetfile"); System.exit(1); } // Check if source file exists File sourceFile = new File(args[0]); if(!sourceFile.exists()) { System.out.println("Source file " + args[0] + " does not exist"); System.exit(2); } // Check if source file exists File targetFile = new File(args[1]); if(!targetFile.exists()) { System.out.println("Target file " + args[1] + " already exist"); System.exit(3); } try( // Create an input stream BufferedInputStream input = new BufferedInputStream(new FileInputStream(sourceFile)); // Create an output stream BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(targetFile)); ) { // COntinuously read a byte from input and write it to output int r, numberOfBytesCopied = 0; while((r = input.read()) != -1) { output.write((byte)r); numberOfBytesCopied++; } // Display the file size System.out.println(numberOfBytesCopied + " bytes copied"); } } }
程序首先检查用户是否在第 7-10 行从命令行传递了两个必需的参数。
程序使用File类来检查源文件和目标文件是否存在。如果源文件不存在(第 14-17 行)或目标文件已存在(第 20-24 行),则程序结束。
第 28 行使用包裹在 FileInputStream 上的 BufferedInputStream 创建输入流,并使用包裹在 FileOutputStreamBufferedOutputStream 创建输出流。 🎜> 第 31 行。
表达式((r = input.read()) != -1) (第 35 行)从 读取一个字节
input.read(),将其赋值给r,并检查是否为-1。输入值 -1 表示文件结束。程序不断从输入流读取字节并将它们发送到输出流,直到读取完所有字节。
以上是案例研究:复制文件的详细内容。更多信息请关注PHP中文网其他相关文章!