30

我想通过使用“文件类”从项目文件夹中获取文件,我该怎么做?

File file=new File("x1.txt");
4

9 回答 9

33

嗯,有许多不同的方法可以在 Java 中获取文件,但这是一般要点。

不要忘记您try {} catch (Exception e){}至少需要将其包装在 a 中,因为 File 是其中的一部分,java.io这意味着它必须具有 try-catch 块。

不要踩 Ericson 的问题,但如果您使用的是实际的软件包,除非您明确使用它的位置,否则您将遇到文件位置的问题。相对路径被包弄乱了。

IE,

src/
    main.java
    x.txt

在此示例中,使用File f = new File("x.txt");inside ofmain.java将引发 file-not-found 异常。

但是,使用File f = new File("src/x.txt");将起作用。

希望有帮助!

于 2013-06-25T01:06:53.103 回答
13

这听起来像是文件嵌入在您的应用程序中。

您应该使用getClass().getResource("/path/to/your/resource.txt"),它返回一个URLorgetClass().getResourceAsStream("/path/to/your/resource.txt");

如果它不是嵌入式资源,那么您需要知道从应用程序执行上下文到文件所在位置的相对路径

于 2013-06-25T00:55:55.277 回答
9

如果您不指定任何路径并仅放置文件(就像您所做的那样),默认目录始终是您的项目之一(它不在“src”文件夹内。它只是在您项目的文件夹内)。

于 2013-06-25T00:56:04.427 回答
9

如果您尝试加载与 Java 类不在同一目录中的文件,则必须使用运行时目录结构,而不是在设计时出现的目录结构。

要了解运行时目录结构是什么,请检查您的 {root project dir}/target/classes 目录。该目录可通过“.”访问。网址。

根据user4284592的回答,以下内容对我有用:

ClassLoader cl = getClass().getClassLoader();
File file = new File(cl.getResource("./docs/doc.pdf").getFile());

具有以下目录结构:

{root dir}/target/classes/docs/doc.pdf

这是一个解释,所以你不要只是盲目地复制和粘贴我的代码:

  • java.lang.ClassLoader是一个负责加载类的对象。每个 Class 对象都包含对定义它的 ClassLoader 的引用,并且可以使用getClassLoader()方法获取它。
  • ClassLoader 的getResource方法查找具有给定名称的资源。资源是可以由类代码以独立于代码位置的方式访问的一些数据。
于 2016-04-06T08:20:46.937 回答
3

这些行在我的情况下有效,

ClassLoader classLoader = getClass().getClassLoader();
File fi = new File(classLoader.getResource("test.txt").getFile());

在 src 中提供了 test.txt 文件

于 2014-12-18T08:17:10.460 回答
2

application.yaml给定一个文件test/resources

ll src/test/resources/
total 6
drwxrwx--- 1 root vboxsf 4096 Oct  6 12:23 ./
drwxrwx--- 1 root vboxsf    0 Sep 29 17:05 ../
-rwxrwx--- 1 root vboxsf  142 Sep 22 23:59 application.properties*
-rwxrwx--- 1 root vboxsf   78 Oct  6 12:23 application.yaml*
-rwxrwx--- 1 root vboxsf    0 Sep 22 17:31 db.properties*
-rwxrwx--- 1 root vboxsf  618 Sep 22 23:54 log4j2.json*

从测试上下文中,我可以获取文件

String file = getClass().getClassLoader().getResource("application.yaml").getPath(); 

这实际上将指向文件test-classes

ll target/test-classes/
total 10
drwxrwx--- 1 root vboxsf 4096 Oct  6 18:49 ./
drwxrwx--- 1 root vboxsf 4096 Oct  6 18:32 ../
-rwxrwx--- 1 root vboxsf  142 Oct  6 17:35 application.properties*
-rwxrwx--- 1 root vboxsf   78 Oct  6 17:35 application.yaml*
drwxrwx--- 1 root vboxsf    0 Oct  6 18:50 com/
-rwxrwx--- 1 root vboxsf    0 Oct  6 17:35 db.properties*
-rwxrwx--- 1 root vboxsf  618 Oct  6 17:35 log4j2.json*
于 2016-10-07T02:18:41.447 回答
1
String path = System.getProperty("user.dir")+"/config.xml";
File f=new File(path);
于 2017-08-13T16:09:28.807 回答
0

在 javaFx 8 中

javafx.scene.image.Image img = new javafx.scene.image.Image("/myPic.jpg", true);

URL url = new URL(img.impl_getUrl());
于 2015-03-01T12:49:16.793 回答
0

刚刚做了一个快速的谷歌搜索,发现

System.getProperty("user.dir");

以字符串形式返回当前工作目录。因此,要从中获取文件,只需使用

File projectDir = new File(System.getProperty("user.dir"));
于 2015-07-10T16:09:43.947 回答