You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java同目录下文本文件无法找到读取、创建File对象长度为0问题

问题原因

你用File file = new File("letters.txt")传入的相对路径,默认是相对于Java进程的运行工作目录,不是类文件所在的包目录。通常IDE运行Java项目时的默认工作目录是项目根路径,而非src/hw1目录,所以程序找不到letters.txt文件,此时File对象指向的是一个不存在的文件,调用length()方法自然返回0。

验证方法

可以加入两行调试代码确认问题:

// 打印文件是否存在,正常会输出false
System.out.println(file.exists());
// 打印当前进程的工作目录,确认不是src/hw1路径
System.out.println(System.getProperty("user.dir"));

解决方案

方案1(推荐):使用类路径加载同包资源

这种方式不依赖运行工作目录,适配开发和打包后的运行场景:

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;

public class TextSwap {
    public static void main(String[] args) throws URISyntaxException {
        // 从当前类的同包路径加载资源
        URL resource = TextSwap.class.getResource("letters.txt");
        if (resource != null) {
            File file = new File(resource.toURI());
            long fileLength = file.length();
            System.out.println("文件长度:" + fileLength);
        }
    }
}

注意:如果项目最终会打包成jar包运行,jar包内部的资源无法被封装为File对象,此时建议直接用TextSwap.class.getResourceAsStream("letters.txt")获取输入流读取内容,需要统计长度的话可以读取流的总字节数即可。

方案2(不推荐):补全相对路径

如果确定不会打包运行,且工作目录固定为项目根目录,可以直接写全路径:

File file = new File("src/hw1/letters.txt");

该方案耦合了运行环境的目录结构,迁移性差,不建议使用。

内容的提问来源于stack exchange,提问作者HalfMillennium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:36:03