正しくJavaでのファイルからテキストを表示します

Daimen:

私は現在のディレクトリ内の複数のファイル(UTF-8)を読んで、配列にそのテキストファイル内の各要素を保存しようとしています。

私は、しかし、それは私が自分自身をオフに取り除くように見えることはできませんいくつかの変な文字を示してコンソールに印刷するテキストを取得することができています(参照用画像 - 右側に表示されるようになっているはずである何)。

現在、私はその文字列に入れ、それを読む方法にこれらのファイル名のそれぞれを送信するforループを使用して、そのディレクトリ内のすべてのファイル名を持つ配列を作成する方法があります。

以下のメソッドは、配列にこれらのファイル名を書き込みます。

 public static ArrayList<String> readModelFilesInModelDir() {
    File folder = new File("Models/");
    File[] listOfFiles = folder.listFiles();
    String random = "";
    assert listOfFiles != null;
    ArrayList<String> listOfModelFiles = new ArrayList<>();
    for (int i = 0; i < listOfFiles.length; i++) {
        if (listOfFiles[i].isFile()) {
            //System.out.println("File " + listOfFiles[i].getName());
            listOfModelFiles.add(listOfFiles[i].getName());
        } else if (listOfFiles[i].isDirectory()) {
            System.out.println("Directory " + listOfFiles[i].getName());
        }
    }
    System.out.println(listOfModelFiles);

    return listOfModelFiles;

ループの下に、その後readメソッドにこれらのファイル名を送信します。

ArrayList<String> modelFiles = readModelFilesInModelDir();
    for (int i = 0; i < modelFiles.size(); i++) {
        String thisString = readModelFileIntoArray(modelFiles.get(i));
        System.out.println(thisString);
    }

以下の方法は、次に、画像が表示何出力している配列、に文字列を読み出します。

 public static String readModelFileIntoArray(String modelFilePath) {
    StringBuilder fileHasBeenRead = new StringBuilder();
    try {
        Reader reader = new InputStreamReader(new FileInputStream(("Models/" + modelFilePath)), StandardCharsets.UTF_8);
        String s;
        BufferedReader bufferedReader = new BufferedReader(reader);
        while ((s = bufferedReader.readLine()) != null) {
            fileHasBeenRead.append(s + "\n");
        }
        reader.close();
    } catch (Exception e) {
        System.out.print(e);
    }
    return fileHasBeenRead.toString().trim();
}

最後に、どのように私は私が他の場所で使用できることを別々の配列に読み込まれただけでなく、これらの各ファイルを保存すると、この出力の問題は解決しますか?ありがとう!

何であることのような表情をしてどのように見えるかです

user2572030:

私はあなたのファイルはUTF-16ではなく、UTF-8でエンコードされ、ジョニーMOPPに同意します。2 ��のようなあなたの出力ルックスの先頭にバイトオーダーマーク(BOM) UTF-16では、各文字が2バイトで符号化されます。テキストのみのASCII範囲の文字が含まれているので、それぞれの最初のバイトは常に0x00であることを意味しています。あなたはこれらすべてを見ている理由はここにある:彼らは非印字文字0x00に対応しています。私も、次の2つの文字があるためだと思い��ますし、aこのために、あなたのファイルが使用しているビッグエンディアンUTF-16。

代わりにUTF-8を使用しますStandardCharsets.UTF_16それも考慮にBOMを取り、適切なエンディアンを使用します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=22769&siteId=1