换行符与系统换行符不同

时间:2012-06-25 16:08:53

标签: java string newline inputstream

我的问题:如何强制输入流处理行分隔符作为系统标准行分隔符?

我将文件读取为字符串,换行符转换为\n,但我的System.getProperty("line.separator");\r\n。我希望这是portable,所以我希望我的文件阅读器将新行读取为系统标准换行符(无论可能是什么)。我怎么强迫它?以下是Java Helper库中用于以字符串形式读取文件的方法。

/**
* Takes the file and returns it in a string. Uses UTF-8 encoding
*
* @param fileLocation
* @return the file in String form
* @throws IOException when trying to read from the file
*/
public static String fileToString(String fileLocation) throws IOException {
  InputStreamReader streamReader = new InputStreamReader(new FileInputStream(fileLocation), "UTF-8");
  return readerToString(streamReader);
}

/**
* Returns all the lines in the Reader's stream as a String
*
* @param reader
* @return
* @throws IOException when trying to read from the file
*/
public static String readerToString(Reader reader) throws IOException {
  StringWriter stringWriter = new StringWriter();
  char[] buffer = new char[1024];
  int length;
  while ((length = reader.read(buffer)) > 0) {
    stringWriter.write(buffer, 0, length);
  }
  reader.close();
  stringWriter.close();
  return stringWriter.toString();
}

4 个答案:

答案 0 :(得分:2)

建议使用BufferedReader以便携方式逐行读取文件,然后使用您选择的行分隔符,使用读取的每一行写入所需的输出< / p>

答案 1 :(得分:2)

您的readerToString方法不会任何到行结尾。它只是复制字符数据 - 这就是全部。完全不清楚您是如何诊断问题的,但该代码确实不会\n更改为\r\n。它必须是文件中的\r\n - 您应该在十六进制编辑器中查看。是什么创建了该文件?你应该看看那里是否有任何换行符。

如果您想阅读行,请使用BufferedReader.readLine()来处理\r\n\r\n

请注意Guava有很多有用的方法可以读取读者的所有数据,以及将读者分成几行等。

答案 2 :(得分:1)

使用Scanner#useDelimiter方法,您可以指定在阅读FileInputStream或其他内容时使用的分隔符。

答案 3 :(得分:1)

您可以使用BufferedReader逐行读取文件并转换行分隔符,例如:

public static String readerToString(Reader reader) throws IOException {
    BufferedReader bufReader = new BufferedReader(reader);
    StringBuffer stringBuf = new StringBuffer();
    String separator = System.getProperty("line.separator");
    String line = null;

    while ((line = bufReader.readLine()) != null) {
      stringBuf.append(line).append(separator);
    }
    bufReader.close();
    return stringBuf.toString();
}