Java 如何识别文本文件';s线分离器?你能在写入文本文件时复制它吗?
在Java工作时,一个家庭作业问题要求我 读一个文件, 操纵其中的字符串和行(不是问题) 写入文件, 但是保留原始文件中使用的行分隔符,并在回写文件时使用它(大问题), Junit测试将使用多个不同的行分隔符作为文件输入 我的问题是,我可以使用什么方法来识别文本文件使用的行分隔符 我的项目正在输入和读取的文件文本可以有/r、/n、/r/n或+System.lineSeparator()。当我写入文本文件时,我还需要匹配原始的行分隔符,这样它就可以对操作系统友好Java 如何识别文本文件';s线分离器?你能在写入文本文件时复制它吗?,java,Java,在Java工作时,一个家庭作业问题要求我 读一个文件, 操纵其中的字符串和行(不是问题) 写入文件, 但是保留原始文件中使用的行分隔符,并在回写文件时使用它(大问题), Junit测试将使用多个不同的行分隔符作为文件输入 我的问题是,我可以使用什么方法来识别文本文件使用的行分隔符 我的项目正在输入和读取的文件文本可以有/r、/n、/r/n或+System.lineSeparator()。当我写入文本文件时,我还需要匹配原始的行分隔符,这样它就可以对操作系统友好 String data = "
String data = "";
try { data = new String(Files.readAllBytes(Paths.get(path)));
} catch (IOException e) { e.printStackTrace(); }
//System.out.println("Text file as String in Java");
//System.out.println(data);
String linesep= "";
if (data.contains("\n") == true){
linesep="\n";
//System.out.println("n detected");
}else if((data.contains("\r") == true)){
linesep="\r";
//System.out.println("r detected");
}
else {
linesep= System.lineSeparator();
//System.out.println("line separator detected");
}
您向我们展示的要求是: Junit测试将使用多个不同的行分隔符作为文件输入 他们并没有说每个测试都会在整个文件中使用一致的行分隔符。他们也没有说最后一行总是以分隔符结尾 如果您编写代码试图找出使用了哪个分隔符,那么当文件包含混合分隔符时,它将中断 因此,您需要做的是在每行的末尾保留分隔符,包括空行。您需要处理可能没有分隔符的最后一行 提示:行分隔符只是字符,因此可以将它们包含在行字符串中。。。如果您决定将输入拆分为多行 。。。你能在写入文本文件时复制它吗
看上面 您向我们展示的要求是: Junit测试将使用多个不同的行分隔符作为文件输入 他们并没有说每个测试都会在整个文件中使用一致的行分隔符。他们也没有说最后一行总是以分隔符结尾 如果您编写代码试图找出使用了哪个分隔符,那么当文件包含混合分隔符时,它将中断 因此,您需要做的是在每行的末尾保留分隔符,包括空行。您需要处理可能没有分隔符的最后一行 提示:行分隔符只是字符,因此可以将它们包含在行字符串中。。。如果您决定将输入拆分为多行 。。。你能在写入文本文件时复制它吗
看上面 据我所知,如果没有一些不在文件本身中的附加信息,就无法毫无疑问地说出特定文件的行分隔符是什么 正如其他人所指出的,回车符和换行符只是字符——它们没有什么特别之处。这只是一种惯例,即这些是分隔符,Windows上的惯例与Linux和Mac OS上的惯例不同 但是,特别是因为听起来您的程序将要编写文件,您可以尝试做出一些假设:
- 每个文件将只使用三个“标准”行分隔符中的一个:\r\n或\r\n
- 每个文件将不包含任何其他两个行分隔符
System.setProperty("line.separator", "\r\n");
使用在文件中找到的行分隔符
这将导致在您正常写入文件时使用新的分隔符。据我所知,如果没有文件本身不包含的其他信息,就无法毫无疑问地确定特定文件的行分隔符是什么 正如其他人所指出的,回车符和换行符只是字符——它们没有什么特别之处。这只是一种惯例,即这些是分隔符,Windows上的惯例与Linux和Mac OS上的惯例不同 但是,特别是因为听起来您的程序将要编写文件,您可以尝试做出一些假设:
- 每个文件将只使用三个“标准”行分隔符中的一个:\r\n或\r\n
- 每个文件将不包含任何其他两个行分隔符
System.setProperty("line.separator", "\r\n");
使用在文件中找到的行分隔符
这将导致在您正常写入文件时使用新的分隔符。能否详细说明必须应用的操作?简单地将行分隔符视为字符串的一部分可能是最容易的。步骤1:什么是标准行分隔符?(对于windows、macos和unix/linux,只有少数几种可能)第2步:检查数据,看看哪些数据实际上正在使用,因为您知道其中有行结尾的数据(回答第1步后,您会发现这一步应该非常简单,因为您不能使用“非行结尾”的行结尾.总是一行结尾)。第3步:现在差不多完成了。您需要直接从InputStream(而不是BufferedReader)读取文件,然后查看您找到的行尾。如果您可以将整个文件保存在内存中并进行编辑,您可以将其读入缓冲区并写入相同的缓冲区(更改内容后)。如果文件的可用内存不够大,您可以将其整个内容作为字节数组读取,并从这些字节中创建一个字符串(您可能需要知道其字符)