正确访问具有名称的文件的方法

时间:2012-11-11 20:44:22

标签: java file netbeans file-io path

好的,我需要有人为我解决问题。
我看到了一百种不同的方式来访问要读取的文件(FileReader)。

我尝试了所有这些,但无法找到正确的方法。

如果我尝试:

String path = Engine.class.getResource("Words.txt").toString();

URL url = getClass().getResource("Words.txt");
String path = url.getFile();
File myFile = new File(path);

我直接去:

dispatchUncaughtException

我只是不知道在哪里看,因为似乎没有人同意这样做的好方法。另外,那种例外是什么?
必须是一种简单的方法,因为它是一项非常容易的任务。我只是希望我的程序能够看到我项目的Words.txt文件夹中的SRC文件。


完整代码,如果它有帮助:

public String GetWord()
{
 String [] Words = new String [10];
 int random = (int)(Math.random() * 10);
 URL url = getClass().getResource("Words.txt");
 String path = url.getFile();
 File myFile = new File(path);

  try 
  {
       FileReader myReader = new FileReader(myFile);
       BufferedReader textReader = new BufferedReader(myReader);

        for(int i = 0; i < 10; i++)
        {
           Words[i] = textReader.readLine();
        }
   } 
  catch(Exception e) 
  { 
        System.out.println(e.getMessage());
  }

  return Words[random];
  }

2 个答案:

答案 0 :(得分:3)

String path = Engine.class.getResource("Words.txt").toString();

要使其正常工作,您的文件必须与Engine类位于同一个包中。因此,您可能希望将文件移动到类所在的包中。

如果要将文件移动到其他包中,则需要指定从类路径的根开始的位置。例如/some/other/pkg/Words.txt


对于不在类路径中的文件,您需要完整路径和文件名,才能读取文件。 SRC文件夹本身不是包,也不在类路径中。

在这种情况下,您可以执行以下操作:

FileInputStream fis = new FileInputStream("C:\\path\\to\\file\\Words.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));

答案 1 :(得分:1)

如果您使用Java 7,我建议使用newBufferedReader。它比BufferedReader更有效,更容易使用。我还修改了您的代码以匹配Java Code Conventions

工作例:

public String getWord() {
    String[] words = new String[10];
    int random = (int) (Math.random() * 10);
    Path path = Paths.get("src" + System.getProperty("file.separator")
            + "Words.txt");

    try {
        BufferedReader textReader = Files.newBufferedReader(path,
                StandardCharsets.UTF_8);

        for (int i = 0; i < 10; i++) {
            words[i] = textReader.readLine();
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    return words[random];
}