面向对象程序设计(双语)|| 实验六:文件(Java版)
一、实验目的
- 掌握文件、目录管理以及文件操作的方法。
- 掌握输入输出流的基本概念和流处理类的基本结构。
- 掌握使用文件流进行文件输入输出的基本方法。
二、实验内容、过程及结果
题目:文件的复制(用缓冲流进行时间的对比)
程序设计思路
package ExmapleInClass;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;public class TestCopy {public static void main(String[] args) throws IOException {Scanner input = new Scanner(System.in);while (true) {System.out.println("请输入需要复制文件的绝对路径:");String fromPath = input.nextLine();File fromFile = new File(fromPath);if (fromFile.exists() && fromFile.isFile()) {System.out.println("请输入文件复制目标路径:");String toPath = input.nextLine();File toFile = new File(toPath + File.separator + "copy_" + fromFile.getName());// File.separator 文件分隔符FileInputStream inFromFile = null;FileOutputStream outToFile = null;try {inFromFile = new FileInputStream(fromFile);outToFile = new FileOutputStream(toFile);byte[] buffer = new byte[10 * 1024];int bytesRead;long startTime = System.currentTimeMillis(); // 记录开始时间while ((bytesRead = inFromFile.read(buffer)) != -1) {outToFile.write(buffer, 0, bytesRead);}long endTime = System.currentTimeMillis(); // 记录结束时间System.out.println("文件复制成功!");System.out.println("复制耗时:" + (endTime - startTime) + "毫秒");} catch (IOException e) {System.out.println("文件复制出错:" + e.getMessage());} finally {if (inFromFile != null) {inFromFile.close();}if (outToFile != null) {outToFile.close();}}break; // 结束循环} else {System.out.println("输入的文件路径不存在或不是文件,请重新输入!");}}input.close();}
}缓冲流实现:
package ExmapleInClass;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;public class TestCopyBuffer {public static void main(String[] args) throws IOException {Scanner input = new Scanner(System.in);while (true) {System.out.println("请输入需要复制文件的绝对路径:");String fromPath = input.nextLine();File fromFile = new File(fromPath);if (fromFile.exists() && fromFile.isFile()) {System.out.println("请输入文件复制目标路径:");String toPath = input.nextLine();File toFile = new File(toPath + File.separator + "copy_" + fromFile.getName());try (BufferedInputStream inFromFile = new BufferedInputStream(new FileInputStream(fromFile));BufferedOutputStream outToFile = new BufferedOutputStream(new FileOutputStream(toFile))) {byte[] buffer = new byte[10 * 1024];int bytesRead;long startTime = System.currentTimeMillis(); // 记录开始时间while ((bytesRead = inFromFile.read(buffer)) != -1) {outToFile.write(buffer, 0, bytesRead);}long endTime = System.currentTimeMillis(); // 记录结束时间System.out.println("文件复制成功!");System.out.println("复制耗时:" + (endTime - startTime) + "毫秒");} catch (IOException e) {System.out.println("文件复制出错:" + e.getMessage());}break; // 结束循环} else {System.out.println("输入的文件路径不存在或不是文件,请重新输入!");}}input.close();}
}
题目:显示文件夹下的Java文件
程序设计思路
package SixExp;import java.io.File;public class TestDisplay {public static void main(String[] args) {File dir = new File("E:/ttt/yyy/");showFileList(dir);}public static void showFileList(File fd) {System.out.println(fd.getAbsolutePath() + " <dir>");File[] files = fd.listFiles();for (File f : files) {if (f.isDirectory())showFileList(f);//显示Java文件else if (f.isFile()&&f.getName().toLowerCase().endsWith("java"))System.out.println(f.getAbsolutePath() + " <file>" );/* 获取所有文件elseSystem.out.println(f.getName() + " <file> " + " " + f.length() + "Bytes");*/}}
}
题目:删除文件夹
程序设计思路
package SixExp;
import java.io.File;
import java.io.IOException;public class TestDelete {public static void main(String[] args) {File myDir = new File("E:/ttt/yyy");deleteDirectory(myDir);}public static void deleteDirectory(File directory) {if (!directory.exists()) {System.out.println("文件夹不存在!");return;}if (!directory.isDirectory()) {System.out.println(directory.getAbsolutePath() + " 不是一个文件夹!");return;}File[] files = directory.listFiles();if (files != null) {for (File file : files) {if (file.isDirectory()) {deleteDirectory(file); // 递归删除子文件夹} else {if (file.delete()) {System.out.println("成功删除文件:" + file.getAbsolutePath());} else {System.out.println("无法删除文件:" + file.getAbsolutePath());}}}}if (directory.delete()) {System.out.println("成功删除文件夹:" + directory.getAbsolutePath());} else {System.out.println("无法删除文件夹:" + directory.getAbsolutePath());}}
}
运行结果截图
三、实验结论
通过本次实验实践了文本的复制、删除文件夹和显示文件等操作,得到了宝贵的经验和知识,在文本的复制方面,我学会了使用字节流和缓冲流来实现文件的复制,并加入了记录文本复制的时间功能,这使我更加熟悉了输入输出流的使用,以及文件操作的基本原理;通过删除文件夹的操作,我掌握了递归遍历文件夹中的所有文件和子文件夹,并进行删除的方法;
在显示文件的实验中,我学会了使用递归方式遍历文件夹,并根据文件类型进行不同的处理。这使我能够更灵活地显示文件夹中的特定类型的文件或所有文件;通过实践,我对文件系统的组织结构和文件路径的操作有了更清晰的认识;通过本次实验,我深刻体会到了实际操作对于学习的重要性;在进一步改进方面,我认识到异常处理是一个重要的方面,在实验中,我没有详细处理可能出现的异常情况,例如文件不存在、文件权限不足等,在实际应用中,应该对这些异常进行捕获和处理,以提高程序的可行性,另外,对于文件操作,我需要继续学习进一步优化代码的效率和性能的方法。