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

学习日志12 java

一段时间没更新了,再忙也要抽空写一下博客才行,大前天身体不适休息一天,前天写数模弄晚了睡迟了,昨天又睡多了,很爱睡觉了.....其实是在下软件什么的报错弄了半天,总是有这个阶段的,会进步的!!

其实这个草稿开头日期又改了,时间不等人,一晃又拖了一天。。。

快学java!今天(笔者写在此行字的时候,又变成昨天了)学习文件!平时不要摸鱼太多,期末最后会不能摸鱼的!!6月就要来了!!啊!

1 Java 文件操作的关键知识

1. 文件系统与路径

路径表示
  • 绝对路径:完整路径,如 C:\Users\test.txt(Windows)或 /home/user/test.txt(Linux/macOS)。
  • 相对路径:相对于当前工作目录,如 ./data/config.txt
java.nio.file.Path 与 PathMatcher
  • PathJava 7 引入的路径接口,替代旧的 File 类,提供更灵活的路径操作。
    import java.nio.file.Path;
    import java.nio.file.Paths;Path path = Paths.get("src", "main", "java", "App.java");
    
  • PathMatcher:支持通配符匹配路径,如 glob:*.java 或 regex:.*\.java

2. 文件与目录操作

传统 java.io.File 类
  • 创建文件
    File file = new File("test.txt");
    boolean created = file.createNewFile();
    
  • 检查文件状态
    boolean exists = file.exists();
    boolean isDir = file.isDirectory();
    
  • 删除文件
    boolean deleted = file.delete();
    
Java 7+ 的 java.nio.file.Files 工具类
  • 创建文件 / 目录
    Files.createFile(Paths.get("test.txt"));
    Files.createDirectories(Paths.get("data/subdir"));
    
  • 复制 / 移动 / 删除
    Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
    Files.move(source, target);
    Files.deleteIfExists(path);
    
  • 文件属性
    long size = Files.size(path);
    boolean hidden = Files.isHidden(path);
    

3. 输入输出流(I/O Streams)

字节流 vs 字符流 !!!!!
  • 字节流:处理二进制数据,如图片、音频。
    • InputStream/OutputStream
    • FileInputStream/FileOutputStream
  • 字符流:处理文本数据,自动处理字符编码。
    • Reader/Writer
    • FileReader/FileWriter
缓冲流
  • 包装基础流以提高效率,如 BufferedReaderBufferedWriter
    try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}
    }
    
序列化(Serialization)
  • 将对象转换为字节序列,用于存储或网络传输。
    class Person implements Serializable {private String name;// ...
    }// 序列化
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"));
    oos.writeObject(person);// 反序列化
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"));
    Person restored = (Person) ois.readObject();
    

4. 文件读写最佳实践

使用 try-with-resources

自动关闭资源,避免内存泄漏:

try (FileWriter fw = new FileWriter("output.txt")) {fw.write("Hello, World!");
} // 自动关闭 fw
文件编码处理

指定字符编码(如 UTF-8):

try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt"), StandardCharsets.UTF_8))) {bw.write("中文内容");
}
Java 8+ 的 Files 简化读写
// 读取文本文件全部内容
List<String> lines = Files.readAllLines(Paths.get("input.txt"), StandardCharsets.UTF_8);// 写入文本
Files.write(Paths.get("output.txt"), "Hello".getBytes(StandardCharsets.UTF_8));

5. 目录遍历与文件查找

递归遍历目录
Files.walk(Paths.get("data")).filter(Files::isRegularFile).forEach(path -> System.out.println(path));
查找特定文件
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.{java,class}");
Files.find(Paths.get("src"), 10, (path, attrs) -> matcher.matches(path.getFileName())).forEach(System.out::println);

6. 临时文件与文件锁

创建临时文件
File tempFile = File.createTempFile("prefix", ".tmp");
tempFile.deleteOnExit(); // JVM退出时自动删除
文件锁
  • 防止多进程同时修改文件:
    try (RandomAccessFile file = new RandomAccessFile("data.txt", "rw");FileChannel channel = file.getChannel();FileLock lock = channel.lock()) { // 或使用 tryLock() 非阻塞// 安全地修改文件
    }
    

7. 常见问题与注意事项

  1. 路径分隔符

    • Windows 使用 \,Linux/macOS 使用 /
    • 使用 File.separator 或 Paths.get() 自动处理。
  2. 权限问题

    • 创建文件前检查目录是否可写:file.getParentFile().mkdirs()
  3. 大文件处理

    • 使用缓冲流或 NIO 的 MappedByteBuffer 避免内存溢出。
  4. 字符编码

    • 读写文本时显式指定编码(如 UTF-8),避免乱码。

总结

Java 的文件操作经历了从 java.io 到 java.nio.file 的演进,后者提供了更现代、更高效的 API。实际开发中,建议优先使用 FilesPath 等 NIO 工具类,并注意资源管理和编码处理。

 2 有关命令行控制文件io流的心得

折腾两天的结果,自己记录一下。学的东西并不多但是贵在多摸索了,没有放弃

1 环境变量

在调试千次万次代码无果的时候,可以回头看一下最基础的jdk环境是否兼容。

在经过学习以后,我把初始下载更无知的阶段jdk1.8版本卸载重装,当时跟练的博客已经太久远了。

下载选择openjdk21,这个版本的jdk环境稳定,在github上也会有更多的开源代码。然后idea配置项目的jdk环境和电脑配置的系统环境变量一致,这样,我们的代码才能成功在命令行运作。

可以在win R 输入regedit 找到jdk地址设置好环境变量,控制面板或者cmd命令行看是不是配好了

关于python库的配置也是差不多,pip install 库,然后可以在pycharm里面生成一个test.py

简单调用一下库随便写一个print version 的语句试试呢,如果安装好了就是可以跑起来的,不能的话直接在ide里面装也可,不过我试过还是先在cmd指令里装好,pycharm才比较容易成功安装,不然有时候会抽风,一开始怎么也装不上,可能是版本编译器的问题,更新了ide的版本编译器和系统环境一致就可以了,想来自己在这些最基础的地方还是太忽视,经验不足,不过才开始一切错误都是财富。

2 有关命令行提示符

cd \d 代码存储目录 (存储路径复制了以后删掉代码的名字)

可以导入把我的c盘转到我存的另一个盘里面,cd ..\退一个目录 

javac生成源代码------------使用javac命令编译.java文件,出现一个新的class文件

然后java文件 打开文件名 生成文件名 

注意文件所在目录 要找对路径 多试试几次就熟练了,最好有try异常处理交互,就很明白是不是输错路径了,这块代码要多练多练。

相关文章:

  • 【IPMV】图像处理与机器视觉:Lec12 Blob Detector 斑点检测
  • MLA:Transformer的智能变形金刚——解密多头潜在注意力的进化密码
  • DOM事件的传播机制
  • Dify 本地源码安装教程
  • Llama 4中文调优全流程解
  • Win11 系统登入时绑定微软邮箱导致用户名欠缺
  • ST表——算法的优化
  • LambdaQueryWrapper、MybatisPlus提供的基本接口方法、增删改查常用的接口方法、自定义 SQL
  • QML学习06Button
  • ArrayList 与 LinkedList 区别?
  • CMake学习笔记(六)可以在CMake的function中修改function函数体之外的变量值吗?
  • 探索智能仓颉
  • git push出现 “HTTP 400 curl 22 The requested URL returned error: 400...“错误
  • Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
  • 白皮精读:全国统一数据资产登记体系建设白皮书【附全文阅读】
  • MQTT-SpringBoot整合
  • 6.4.3_有向无环图描述表达式
  • JAVA 项目中 maven pom.xml 和 properties 配置文件、spring 配置文件,以及环境变量的关系
  • 深入理解Istio:全面解析与实践指南
  • 向量数据库选型实战指南:Milvus架构深度解析与技术对比
  • wordpress多站点的路径/关键词首页排名优化平台
  • 毕业设计做旅游网站/黑帽seo什么意思
  • 网站如何做快排/推广网页怎么做的
  • 网站链接太多怎么做网站地图/bt种子万能搜索神器
  • 兰州做网站的公司/佛山网站建设十年乐云seo
  • 做网站的心得/营销网站建设大概费用