有 Java 编程相关的问题?

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

用Java中的UTF16进行文件io编码

我正在试着读/写一本书。UTF-16格式的txt文件,以便我可以在程序中输入/输出日语字符。我已经阅读了许多类似的问题、文章和Java文档,几乎复制了它们的代码,但仍然无法找出哪里出了问题。如果我将它输出到控制台,或者每当我检查文件的内容(使用正确的编码)时,我看到的都是一个“?”代替あ'.

应用程序类别:

public class App {
  public static void main(String[] args) {
    String[] s = {"あ"}; //A test String array
    FileReader.write("unicode.txt", "UTF-16", s, false);
    System.out.println("File: " + FileReader.read("unicode.txt", "UTF-16") + " Hard-coded example: あ");
  }
}

文件读取器类:

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.nio.charset.Charset;

public class FileReader {

  public static String[] read(String fileName, String encoding) {
    ArrayList<String> content = new ArrayList<String>();
    try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), Charset.forName(encoding).newDecoder()))) {
      for(String s = reader.readLine(); s != null; s = reader.readLine()) {
        content.add(s);
      }
      reader.close();
    } catch(IOException e) {
      System.out.println("An IOException(Input) has been thrown.");
      e.printStackTrace();
    }
    return convertToStringArray(content);
  }

  public static void write(String fileName, String encoding, String[] content, boolean append) {
    try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, append), Charset.forName(encoding).newEncoder()))) {
      for(String s : content) {
        writer.write(s);
        writer.newLine();
      }
      writer.close();
    } catch (IOException e) {
      System.out.println("An IOException(appending=" + append + ") has been thrown.");
      e.printStackTrace();
    }
  }

  private static String[] convertToStringArray(ArrayList<String> list) {
    String[] array = new String[list.size()];
    list.toArray(array);
    return array;
  }
}

共 (0) 个答案