从项目文件夹java获取文件

Saa*_*mad 23 java file

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

File file=new File("x1.txt");
Run Code Online (Sandbox Code Playgroud)

Sin*_*1ty 23

嗯,有许多不同的方法来获取Java文件,但这是一般的要点.

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

不要踩到Ericson的问题,但是如果你使用实际的软件包,你会遇到文件位置的问题,除非你明确使用它的位置.相对路径与包混乱.

src/
    main.java
    x.txt
Run Code Online (Sandbox Code Playgroud)

在这个例子中,使用File f = new File("x.txt");inside main.java会抛出一个file-not-found异常.

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

希望有所帮助!

  • `File`本身不会抛出任何`IOException`.它的一些方法可以,但只是创建一个`File`对象不需要任何`try-catch` ...引用`src`目录也是一个坏主意,因为它在构建应用程序时不可用部署. (5认同)

Mad*_*mer 12

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

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

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

  • 你不得不惊叹盲目的投票——这在哪些方面不能回答 OP 的问题?可以从哪些方面改进?什么都没提到,什么都没有改变 (2认同)

Eri*_*ans 9

如果你没有指定任何路径并只放置文件(就像你做的那样),默认目录总是你的项目之一(它不在"src"文件夹里面.它就在你项目的文件夹里面).


Chr*_*eve 7

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

要找出运行时目录结构是什么,请检查{root project dir}/target/classes目录.该目录可通过"."访问.URL.

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

ClassLoader cl = getClass().getClassLoader();
File file = new File(cl.getResource("./docs/doc.pdf").getFile());
Run Code Online (Sandbox Code Playgroud)

具有以下目录结构:

{root dir}/target/classes/docs/doc.pdf
Run Code Online (Sandbox Code Playgroud)

希望这有助于任何努力理解URL逻辑的人.

  • 这对包外的文件有用吗?例如,就在同一个项目文件夹下? (2认同)
  • 所以,在我上面的回答中,"doc.pdf"文件完全在包之外.有问题的包将有一个类似于这个的位置:{root dir} /src/main/java/com/chris/n/whateverMyClassNameIs.java (2认同)