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

如何不使用文件完整路径访问文件?与Runner类同处src目录的deneme.txt为何无法直接通过文件名访问?

问题解答:Java File类无法访问同目录文件的原因与解决方案

嘿,我来帮你搞定这个问题~你遇到的核心问题是对Java中相对路径的工作目录理解有误,下面我分两部分给你解释和解决:

为什么直接用deneme.txt找不到文件?

Java里File类的相对路径,是相对于程序运行时的工作目录(Working Directory),而不是你的.java源文件所在的src目录。

在Eclipse中,默认的工作目录是你的项目根目录(也就是HW1这个文件夹),而你的deneme.txt放在src子目录下。当你写new File("deneme.txt")时,Java会去HW1目录下找这个文件,而不是HW1/src,自然就找不到啦。

不用完整路径访问文件的几种方法

方法1:使用相对于工作目录的相对路径

既然工作目录是项目根,那直接指定src下的路径就行:

import java.io.File;
public class Runner {
    public static void main(String []args) {
        // 用相对路径指向src目录下的文件
        File file = new File("src/deneme.txt");
        System.out.println(file.exists());
        System.out.println(file.isFile());
    }
}

Windows系统下也可以用src\\deneme.txt,不过推荐用/,Java会自动处理跨平台的路径分隔符。

方法2:把文件移到项目根目录

如果允许的话,直接把deneme.txt放到HW1目录下(和src同级),这样new File("deneme.txt")就能直接找到文件了,这是最简单的方式。

方法3:用类加载器获取资源(推荐用于项目打包场景)

如果你的文件是项目的资源文件(比如配置文件、数据文件),更推荐用类加载器来获取,这种方式不管是在IDE里运行,还是以后打包成JAR文件,都能正确找到文件:

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

public class Runner {
    public static void main(String []args) {
        try {
            // 通过类加载器获取同目录下的资源
            URL fileUrl = Runner.class.getResource("deneme.txt");
            if (fileUrl != null) {
                File file = new File(fileUrl.getPath());
                System.out.println(file.exists());
                System.out.println(file.isFile());
            } else {
                System.out.println("文件未找到");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

原理是:当你编译项目时,src下的文件会被复制到编译后的输出目录(比如Eclipse的bin目录),和Runner.class文件在同一个目录下。类加载器会从类的所在路径去查找资源,所以能精准定位到文件。

如果只是需要读取文件内容,还可以直接用getResourceAsStream获取输入流,不用处理File对象,更方便:

import java.io.InputStream;
import java.util.Scanner;

public class Runner {
    public static void main(String []args) {
        try (InputStream is = Runner.class.getResourceAsStream("deneme.txt");
             Scanner scanner = new Scanner(is)) {
            // 读取文件内容
            while (scanner.hasNextLine()) {
                System.out.println(scanner.nextLine());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

内容的提问来源于stack exchange,提问作者Serhat Taş

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:27:35