【问题标题】:Correct way of accessing a file with name访问具有名称的文件的正确方法
【发布时间】:2012-10-31 09:04:35
【问题描述】:

好的,我需要有人帮我解决问题。
我看到了一百种不同的访问文件的方法来读取文件 (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

我只是不知道该往哪里看,因为似乎没有人同意这样做的好方法。另外,这种异常是什么?
必须有一个简单的方法来做到这一点,因为它是如此简单的任务。我只想让我的程序看到我在项目的SRC 文件夹中的Words.txt 文件。


如果有帮助,请提供完整代码:

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];
  }

【问题讨论】:

  • 顺便说一句,我的尝试可能对你们中的一些人没有意义我是 Java 新手,请原谅我,但我现在不知道去哪里找。
  • 为澄清起见,在您的程序中,您是否知道文件的完整路径,还是必须由程序确定?
  • 我无法对完整路径进行硬编码。程序必须知道它在它的 Src 文件中。
  • @PhaDaPhunk:在这种情况下,我认为你可以做的是,获取类路径根目录的路径,上一个目录,然后将文件名附加到它。

标签: java file netbeans file-io path


【解决方案1】:
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));

【讨论】:

  • 如果他的文件位于源文件夹中(我假设在任何包之外),我认为他也可以使用文件指针,例如File file = new File('src/Words.txt');,对吗?
  • 是的,没错,但这不是必需的,因为我们可以只创建一个文件输入流,供阅读器使用。
  • 是的,好点。我想我在您进行编辑的同时发表了评论。:) 我想他可以使用文件指针来验证文件是否首先存在,等等,如果他愿意的话。很好的答案。
【解决方案2】:

如果您使用 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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2022-06-25
    • 1970-01-01
    • 2021-10-21
    • 2018-11-04
    • 2017-08-17
    • 1970-01-01
    相关资源
    最近更新 更多