0

わかりました、私のために物事を片付けてくれる人が必要です。
ファイルにアクセスしてファイルを読み取る 100 通りの方法を見てきました ( 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];
  }
4

2 に答える 2

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));
于 2012-11-11T20:50:09.283 に答える
1

Java 7を使用する場合は、newBufferedReaderを使用することをお勧めします。BufferedReaderよりも効率的で使いやすいです。また、 Javaコード規約に一致するようにコードを変更しました。

作業例:

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];
}
于 2012-11-11T21:23:42.013 に答える