0

テキストファイルを見つけて文字の配列にするプロジェクトがあります。しかし、何らかの理由でファイルが見つかりません。これは、ファイルを開く/読み取ることを含むすべてのコードです。

public void initialize(){
    try{
    File file = new File(getClass().getResource("/worlds/world1.txt").toString());
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(
                new FileInputStream(file),
                Charset.forName("UTF-8")));
    int c;
    for(int i = 0; (c = reader.read()) != -1; i ++) {
      for(int x = 0; x < 20; x++){
          worlds[1][x][i] = (char) c;
          c = reader.read();
      }
    }
    }catch(IOException e){
        e.printStackTrace();
    }

}

実行すると、正しいファイルを指していることがコンソールに表示されますが、そこには何も存在しないと主張します。確認しましたが、ファイルは完全に無傷で存在しています。ここで何がうまくいかないのでしょうか?

4

4 に答える 4

3

そのようなリソースを取得するべきではありません。使用できます

BufferedReader reader = new BufferedReader(new InputStreamReader(
    getClass().getResourceAsStream("/worlds/world1.txt")
));

また、IDE 内でアプリケーションを開発する場合は、アプリケーションをパッケージ化するときに注意してください。そうしないと、一般的なCLASSPATH問題が発生します。

于 2012-07-27T17:13:14.867 に答える
0

私は Netbeans を使用していましたが、同様の結果が得られました。C ドライブからファイル パスを定義してコードを実行すると、「アクセスが拒否されました」と表示されました。

次のコードは正常に実行されました。ファイルの場所をソース (src) ファイルにさかのぼるだけです。

//EXAMPLE FILE PATH
String filePath = "src\\solitaire\\key.data";

try {
    BufferedReader lineReader = new BufferedReader(new FileReader(filePath));

    String lineText = null;

    while ((lineText = lineReader.readLine()) != null) {
        hand.add(lineText);

        System.out.println(lineText); // Test print of the lines
    }

    lineReader.close(); // Closes the bufferReader

    System.out.print(hand); // Test print of the Array list
} catch(IOException ex) {
    System.out.println(ex);
}    
于 2014-11-09T06:07:01.833 に答える
0

埋め込みリソースのファイル パスは、パッケージのルート フォルダーから計算されます。srcフォルダーがルート パッケージ フォルダーであると仮定すると、world1.txtファイルがsrc/worlds/フォルダーにあり、フル パスが次の場所にあることを確認してください。src/worlds/world1.txt

2 番目のポイントは、次のコードを使用して、埋め込みファイル リーダー オブジェクトを取得することです。

// we do not need this line anymore
// File file = new File(getClass().getResource("/worlds/world1.txt").toString());

// use this approach
BufferedReader reader = new BufferedReader(
        new InputStreamReader(
            getClass().getResourceAsStream("/worlds/world1.txt"),
            Charset.forName("UTF-8")));
于 2012-07-27T17:17:21.207 に答える
0

ファイルの保存場所を指定していません。

getClass().getResourceクラスパス上のリソース/ファイルを見つけるために使用されます。たとえば、リソースは jar にパッケージ化されている場合があります。この場合、それをFile;として開くことはできません。Raffaele の応答を参照してください。

ファイルシステムでリソース/ファイルを見つけたい場合は、ファイルオブジェクトを直接作成せずに作成しますgetResource()

新しいファイル("/worlds/world1.txt")

于 2012-07-27T17:20:25.667 に答える