【问题标题】:Where does java look for files?java在哪里寻找文件?
【发布时间】:2012-05-17 21:11:02
【问题描述】:

我正在尝试在 java 中读取文件:

Public class Test{

public static void main (String [] args) throws IOException {

BufferedReader f = new BufferedReader(new FileReader("test.in"));

//...

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("test.out")));

//...                                 

}

}

1) “test.in”的位置应该在哪里? (src?bin????)

2) "test.out" 将位于何处?

【问题讨论】:

  • 你是如何执行你的代码的?从命令行还是从 eclipse 之类的地方?
  • 从您询问 src 和 bin 的事实来看,我假设您正在使用某种 SDK?否则答案是微不足道的;该位置将与您执行 java 文件的位置相同。提供有关您正在使用的 SDK 的更多信息,有人可以更好地回答。
  • "Java 在哪里寻找文件?"为什么不问 Java 本身:System.out.println(System.getProperty("user.dir")); 编辑:1+ 到 @mebigfatguy,因为我现在看到他在我面前给出了同样的建议。

标签: java file


【解决方案1】:

在 System.getProperty("user.dir") 指定的目录中查找相对路径文件

【讨论】:

  • 谢谢!但这在 Java 文档中的什么地方注明?
  • 找到了。 docs.oracle.com/javase/8/docs/api/java/io/File.html。 “默认情况下,java.io 包中的类总是根据当前用户目录解析相对路径名。该目录由系统属性 user.dir 命名,通常是调用 Java 虚拟机的目录。”跨度>
【解决方案2】:

答案是工作文件夹,即执行“java ...”命令的文件夹。例如,这是 eclipse 项目中的项目文件夹。

【讨论】:

    【解决方案3】:

    通常它是您正在执行的 Java 文件的确切位置。因此,如果您在 C:\ 中使用您的 Java 文件并且您在没有指定路径的情况下查找文件,它将在 C:\ 中查找,并且输出文件也将在 C:\

    但是,如果您使用的是 Netbeans 之类的东西,您只需将文件放在特定项目的 netbeans 项目文件夹(根目录文件夹)中。不在项目的源文件夹或 bin 文件夹中。

    【讨论】:

    • 仅当您当前的工作目录也恰好与包含“java 文件”的目录相同(我假设我们正在谈论 .class 和 .jar 文件)时,这才是正确的。
    • 有趣的是,我每次得到的结果都是一样的。
    • 我更新了我的评论。如果您的类文件或 jarfile 在C:\java 中,并且您当前的工作目录(您可以使用System.out.println(System.getProperty("user.dir")); 查看)是C:\run,当您启动程序时,它将在C:\run 中查找文件。
    • -1。它是您执行程序时的当前工作目录。期间。
    • 我很确定我是这么说的,但是没关系。
    【解决方案4】:

    我可能在这个问题上花了太长时间,但是:

    C:\temp>notepad test_in.txt =>
    

    你好 Java 输入!

    在同一目录下,创建“Test.java”:

    package com.mytest;
    
    import java.io.*;
    
    public class Test {
    
      public static void main (String [] args) throws IOException {
        System.out.println ("Current directory is " + new File(".").getAbsolutePath());
    
        System.out.println ("Reading file " + INPUT_FILE + "...");
        BufferedReader fis = 
          new BufferedReader(new FileReader(INPUT_FILE));
        String s = fis.readLine ();
        fis.close ();
        System.out.println ("Contents: " + s + ".");
    
        System.out.println ("Writing file " + INPUT_FILE + "...");
        PrintWriter fos = 
          new PrintWriter(new BufferedWriter(new FileWriter("test_out.txt")));
        fos.println ("Hello Java output");
        fos.close ();
        System.out.println ("Done.");
      }
    
      private static final String INPUT_FILE = "test_in.txt";
      private static final String OUTPUT_FILE = "test_out.txt";
    }
    

    最后,运行它——指定完整的包名:

    C:\temp>javac -d . Test.java
    
    C:\temp>dir com\mytest
     Volume in drive C has no label.
     Volume Serial Number is 7096-6FDD
    
     Directory of C:\temp\com\mytest
    
    05/17/2012  02:23 PM    <DIR>          .
    05/17/2012  02:23 PM    <DIR>          ..
    05/17/2012  02:29 PM             1,375 Test.class
                   1 File(s)          1,375 bytes
                   2 Dir(s)  396,478,521,344 bytes free
    
    C:\temp>java com.mytest.Test
    Current directory is C:\temp\.
    Reading file test_in.txt...
    Contents: Hello Java input!.
    Writing file test_in.txt...
    Done.
    
    C:\temp>dir/od test*.txt
     Volume in drive C has no label.
     Volume Serial Number is 7096-6FDD
    
     Directory of C:\temp
    
    05/17/2012  02:24 PM                17 test_in.txt
    05/17/2012  02:29 PM                19 test_out.txt
                   2 File(s)             36 bytes
    

    '希望这有助于解释一些事情,包括:

    • 关于编译和运行的“默认目录”

    • “包”与“目录”的关系

    • 事实上,Java 会将你的类文件放在包目录中(不一定是你的工作目录)

    【讨论】:

      【解决方案5】:

      Eclipse 在项目的根文件夹(项目名称文件夹)中查找该文件。所以你可以让 src/test.in 在项目的 src 文件夹中找到文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-25
        • 2015-03-28
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多