我的问题:如何强制输入流处理行分隔符作为系统标准行分隔符?
我将文件读取为字符串,换行符转换为\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();
}
答案 0 :(得分:2)
建议使用BufferedReader
以便携方式逐行读取文件,然后使用您选择的行分隔符,使用读取的每一行写入所需的输出< / p>
答案 1 :(得分:2)
您的readerToString
方法不会任何到行结尾。它只是复制字符数据 - 这就是全部。完全不清楚您是如何诊断问题的,但该代码确实不会将\n
更改为\r\n
。它必须是文件中的\r\n
- 您应该在十六进制编辑器中查看。是什么创建了该文件?你应该看看那里是否有任何换行符。
如果您想阅读行,请使用BufferedReader.readLine()
来处理\r
,\n
或\r\n
。
请注意Guava有很多有用的方法可以读取读者的所有数据,以及将读者分成几行等。
答案 2 :(得分:1)
使用Scanner#useDelimiter方法,您可以指定在阅读File
或InputStream
或其他内容时使用的分隔符。
答案 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();
}