本节开发了一个用于复制文件的有用实用程序。在本节中,您将学习如何编写允许用户复制文件的程序。用户需要使用以下命令提供源文件和目标文件作为命令行参数:
java 复制源目标
程序将源文件复制到目标文件并显示文件的字节数。如果源文件不存在或目标文件已存在,程序应警告用户。程序的运行示例如下图所示。
要将源文件的内容复制到目标文件,适合使用输入流从源文件读取字节,并使用输出流将字节发送到目标文件,而不管文件的内容如何。源文件和目标文件是从命令行指定的。为源文件创建InputFileStream,为目标文件创建OutputFileStream。使用 read() 方法从输入流中读取一个字节,然后使用 write(b) 方法将该字节写入输出流。使用 BufferedInputStream 和 BufferedOutputStream 来提高性能。下面的代码给出了问题的解决方案。
打包演示; 导入java.io.*; 公共课复制{ 公共静态无效主(字符串[] args)抛出IOException { // 检查命令行参数使用情况 if(args.length != 2) { System.out.println("用法:java复制源文件目标文件"); 系统.退出(1); } // 检查源文件是否存在 文件sourceFile = new File(args[0]); if(!sourceFile.exists()) { System.out.println("源文件 " + args[0] + " 不存在"); 系统.退出(2); } // 检查源文件是否存在 文件目标文件 = 新文件(args[1]); if(!targetFile.exists()) { System.out.println("目标文件" + args[1] + "已经存在"); 系统.退出(3); } 尝试( // 创建输入流 BufferedInputStream 输入 = new BufferedInputStream(new FileInputStream(sourceFile)); // 创建输出流 BufferedOutputStream 输出 = new BufferedOutputStream(new FileOutputStream(targetFile)); ){ // 连续从输入读取一个字节并将其写入输出 int r, 复制字节数 = 0; while((r = input.read()) != -1) { 输出.write((字节)r); 已复制字节数++; } // 显示文件大小 System.out.println(numberOfBytesCopied + " 复制的字节数"); } } }
程序首先检查用户是否在第 7-10 行从命令行传递了两个必需的参数。
程序使用File类来检查源文件和目标文件是否存在。如果源文件不存在(第14-17行)或者目标文件已经存在(第20-24行),则程序结束。
第 28 行中使用包装在 FileInputStream 上的 BufferedInputStream 创建输入流,并使用第 31 行中包装在 FileOutputStream 上的 BufferedOutputStream 创建输出流。
表达式((r = input.read()) != -1)(第35行)从
读取一个字节
input.read(),将其赋值给r,并检查它是否为-1。输入值-1表示文件结束。程序不断从输入流读取字节并将它们发送到输出流,直到读取完所有字节。