java - 如何保留从文件中读取的字符串的正确偏移量

标签 java file-io intellij-idea

我有一个包含以下文本的 text.txt 文件。

 Kontagent Announces Partnership with Global Latino Social Network Quepasa

 Released By Kontagent

我将这个文本文件读入一个字符串 documentText。

documentText.subString(0,9) 给出了 Kontagent,这很好。

但是,documentText.subString(87,96) 在 Windows (IntelliJ Idea) 中提供 y Kontage,在 Unix 环境中提供 Kontagent。我猜它是由于文件中的空行而发生的(之后偏移量被搞砸了)。但是,我不明白为什么我会得到两个不同的结果。我需要在两种环境中获得一个结果。

为了将文件读取为字符串,我使用了这里讨论的所有函数 How do I create a Java string from the contents of a file? .但是,在使用任何功能后,我仍然得到相同的结果。

目前我正在使用这个函数将文件读入 documentText 字符串:

public static String readFileAsString(String fileName)
{

    File file = new File(fileName);
    StringBuilder fileContents = new StringBuilder((int)file.length());
    Scanner scanner = null;
    try {
        scanner = new Scanner(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    String lineSeparator = System.getProperty("line.separator");

    try {
        while(scanner.hasNextLine()) {
            fileContents.append(scanner.nextLine() + lineSeparator);
        }
        return fileContents.toString();
    } finally {
        scanner.close();
    }
}

编辑:有没有一种方法可以编写适用于 Windows 和 UNIX 环境的通用函数。即使文件以文本模式 复制。 因为,不幸的是,我不能保证从事这个项目的每个人都将始终以二进制模式复制文件。

最佳答案

Unix 文件可能使用 native Unix EOL 字符:\n,而 Windows 文件使用 native Windows EOL 序列:\r\n。由于您的文件中有两个 EOL,因此存在 2 个字符的差异。确保使用二进制文件传输,所有字节都将被保留,所有内容将在两个操作系统上以相同的方式运行。

编辑:事实上,是在每个末尾附加操作系统特定 EOL (System.getProperty("line.separator")) 的人线。只需使用 Reader 将文件读取为字符数组,一切都会好起来的。或者使用 Guava 的方法为您完成:

String s = CharStreams.toString(new FileReader(fileName)); 

关于java - 如何保留从文件中读取的字符串的正确偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11475121/

相关文章:

java - Camel : Add TypeConverter in Test Case

java - 使用两个参数对数组进行排序

c++ - 使用 Abaqus ODB C++ API 访问部件

c++ - mmap 比 getline 慢?

python - 从Python中的IDLE编辑器指向源文件

tomcat - 使用 IntelliJ 清理 Tomcat 的工作目录

maven - 在 intellij 14 行找不到可执行代码

Java多态性: non-final method Invocation

java - java中永远无法通过键盘输入的字符

intellij-idea - 如何为 IntelliJ IDEA 插件指定库依赖项?