我想使用"File类"从项目文件夹中获取文件,我该如何做?
File file=new File("x1.txt");
嗯,在Java中有许多不同的方法来获取文件,但这是一般意义。
不要忘记至少要在外面包装一个try {} catch (Exception e){}
,因为File属于java.io
,这意味着它必须有try-catch块。
不是针对Ericson的问题,但如果您使用实际包,您将会遇到文件位置的问题,除非您明确地使用其位置。包相关路径会出现问题。
例如,
src/
main.java
x.txt
在这个例子中,在main.java
中使用File f = new File("x.txt");
会抛出文件未找到异常。然而,使用File f = new File("src/x.txt");
则可以正常工作。希望这能帮到你!File
本身不会抛出任何IOExceptions
,它的一些方法可能会抛出,但是仅仅创建一个File
对象不需要任何的try-catch
。同时引用src
目录也不是一个好主意,因为在应用程序构建和部署时,它将不可用。 - MadProgrammer听起来像是文件被嵌入了您的应用程序。
您应该使用 getClass().getResource("/path/to/your/resource.txt")
,它会返回一个 URL
或 getClass().getResourceAsStream("/path/to/your/resource.txt");
如果不是嵌入式资源,则需要知道从应用程序执行上下文到文件所在位置的相对路径。
{project directory}/somewhere/X.txt
,并尝试从 {project directory}/src/java/GetX.java
访问它。这会是什么样子? - beam022./somewhere/X.txt
),但正如我刚才所说,一旦工作目录更改,这种方法就会失效。你可以使用绝对路径,但问题在于,你要将文件存储在哪里。 - MadProgrammerClassLoader cl = getClass().getClassLoader();
File file = new File(cl.getResource("./docs/doc.pdf").getFile());
具有以下目录结构:
{root dir}/target/classes/docs/doc.pdf
以下是一份说明,让你不会盲目地复制黏贴我的代码:
这些行在我的情况下可行,
ClassLoader classLoader = getClass().getClassLoader();
File fi = new File(classLoader.getResource("test.txt").getFile());
在src文件夹中提供了test.txt文件
String path = System.getProperty("user.dir")+"/config.xml";
File f=new File(path);
假设在test/resources
目录下有一个名为application.yaml
的文件
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*
我刚刚做了一个快速的谷歌搜索,发现
System.getProperty("user.dir");
返回当前工作目录的字符串。因此,要从中获取一个文件,只需使用
File projectDir = new File(System.getProperty("user.dir"));
在JavaFX 8中
javafx.scene.image.Image img = new javafx.scene.image.Image("/myPic.jpg", true);
URL url = new URL(img.impl_getUrl());