当前位置: 首页 > news >正文

面向对象程序设计(双语)|| 实验六:文件(Java版)

一、实验目的

  1. 掌握文件、目录管理以及文件操作的方法。
  2. 掌握输入输出流的基本概念和流处理类的基本结构。
  3. 掌握使用文件流进行文件输入输出的基本方法。

二、实验内容、过程及结果

题目:文件的复制(用缓冲流进行时间的对比)

程序设计思路

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());}}
}

运行结果截图

三、实验结论

通过本次实验实践了文本的复制、删除文件夹和显示文件等操作,得到了宝贵的经验和知识,在文本的复制方面,我学会了使用字节流和缓冲流来实现文件的复制,并加入了记录文本复制的时间功能,这使我更加熟悉了输入输出流的使用,以及文件操作的基本原理;通过删除文件夹的操作,我掌握了递归遍历文件夹中的所有文件和子文件夹,并进行删除的方法;

在显示文件的实验中,我学会了使用递归方式遍历文件夹,并根据文件类型进行不同的处理。这使我能够更灵活地显示文件夹中的特定类型的文件或所有文件;通过实践,我对文件系统的组织结构和文件路径的操作有了更清晰的认识;通过本次实验,我深刻体会到了实际操作对于学习的重要性;在进一步改进方面,我认识到异常处理是一个重要的方面,在实验中,我没有详细处理可能出现的异常情况,例如文件不存在、文件权限不足等,在实际应用中,应该对这些异常进行捕获和处理,以提高程序的可行性,另外,对于文件操作,我需要继续学习进一步优化代码的效率和性能的方法。

相关文章:

  • FFmpeg+Nginx+VLC打造M3U8直播
  • Win 11 重装 Ubuntu 双系统方法
  • 基于Fabric.js的选座布局系统开发笔记
  • 【Linux】43.网络基础(2.5)
  • FPGA IO引脚 K7-认知4
  • 基于MTF的1D-2D-CNN-GRU-Attention时序图像多模态融合的故障识别,适合研究学习(Matlab完整源码和数据),附模型研究报告
  • vmare识别不到共享文件夹,报错:fuse: bad mount point `/mnt/hgfs‘: No such file or directory
  • 2563.统计公平数对的数目 是否顺序无关?
  • 利用 Deepseek 和 Mermaid 画流程图
  • 软件开发指南——GUI 开发方案推荐
  • LeetCode --- 154双周赛
  • 当算力遇上马拉松:一场科技与肉身的极限碰撞
  • JSAPI2.1-DOM基础
  • 【网络技术_域名解析DNS】三、DNS 中间件实践应用与优化策略
  • Linux系统中的网络传输、网络管理以及软件仓库的构建
  • CSS层叠
  • 【java实现+4种变体完整例子】排序算法中【插入排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • CasualLanguage Model和Seq2Seq模型的区别
  • 游戏引擎学习第236天:GPU 概念概述
  • 基于STM32中断讲解
  • 一季度提高两只医药基金股票仓位,中欧基金葛兰加仓科伦药业、百利天恒
  • 世界读书日丨“好书最美”,国家图书馆举办读书日特别活动
  • 多地市场监管部门公开征集居民水电气计量不准确、收费不规范问题线索
  • 接续驰援,中国政府援缅卫生防疫队出发赴缅
  • 错失两局领先浪费赛点,王楚钦不敌雨果无缘世界杯男单决赛
  • 王健林出售酒店管理业务的资金如获批,可用于向全体股东分红