有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java访问名为的文件的正确方式

好的,我需要有人帮我把事情弄清楚
我看到了一百种不同的访问文件的方式来读取它(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) 个答案

  1. # 1 楼答案

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

    正在工作的exmaple:

    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];
    }
    
  2. # 2 楼答案

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

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

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


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

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

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