学习日志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异常处理交互,就很明白是不是输错路径了,这块代码要多练多练。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值