当前位置: 首页 > 知识库问答 >
问题:

使用Java写入文本文件会被缩短

海信鸥
2023-03-14

我有一个程序从一个文本文件(目前有653行长)中读取,所有文件都用逗号分隔。但当我将文件保存到新位置时,它只保存了490行。新创建的文本文件中的最后一行似乎也被切成了两半。有什么问题吗?

这是我用来打开和排序列表中数据的代码:

try {
    scanner = new Scanner(file);

    // Put the database into an array and 
    // Make sure each String array is 13 in length
    while (scanner.hasNext()) {
        line = scanner.nextLine();
        word = line.split(",");

        if (word.length < 13) {
            String[] word2 = {"","","","","","","","","","","","",""};
            for (int i = 0; i < word.length; i++) {
                word2[i] = word[i];
            }
            dataBaseArray.add(word2);
        }
        else {
            dataBaseArray.add(word);
        }
    }
}
catch (FileNotFoundException exc) {
    JOptionPane.showMessageDialog(this, "File cannot be found.", "error finding file", JOptionPane.ERROR_MESSAGE);
}

// Splitting the database into vacant numbers/dead lines/vacant cubicles
for (int i = 0; i < dataBaseArray.size(); i++) {
    if (dataBaseArray.get(i)[8].equals("VACANT")) {
        vacantNums.add(dataBaseArray.get(i));
    }
    else if (dataBaseArray.get(i)[4].equals("DEAD")) {
        deadLines.add(dataBaseArray.get(i));
    }
    else if (dataBaseArray.get(i)[6].equals("") && dataBaseArray.get(i)[7].equals("")) {
        vacantCubs.add(dataBaseArray.get(i));
    }
    else if (dataBaseArray.get(i)[7].equals("")) {
        people.add(dataBaseArray.get(i));
    }
    else {
        people.add(dataBaseArray.get(i));
    }
}

// Resetting the DB Array to put the values back in it
dataBaseArray = new ArrayList<>();

// Ordering the arrays I want them to appear in the list
// Orering the people to appear in alphabetical order
Collections.sort(people, new Comparator<String[]>() {

    @Override
    public int compare(String[] strings, String[] otherStrings) {
        return strings[7].compareTo(otherStrings[7]);
    }
});

// Put the people in the DB Array
for (int i = 0; i < people.size(); i++) {
    dataBaseArray.add(people.get(i));
}

// Put the vacant numbers in the AB Array
for (int i = 0; i < vacantNums.size(); i++) {
    dataBaseArray.add(vacantNums.get(i));
}

// Put the vacant cubicles in the AB Array
for (int i = 0; i < vacantCubs.size(); i++) {
    dataBaseArray.add(vacantCubs.get(i));
}

// Put the dead lines in the AB Array
for (int i = 0; i < deadLines.size(); i++) {
    dataBaseArray.add(deadLines.get(i));
}

list = new String[dataBaseArray.size()];

// Add the DB Array to the list
for (int i = 0; i < list.length; i++) {
    if (dataBaseArray.get(i)[8].equals("VACANT")) {
        list[i] = "VACANT";
    }
    else if (dataBaseArray.get(i)[4].equals("DEAD")) {
        list[i] = "DEAD";
    }
    else if (dataBaseArray.get(i)[6].equals("") && dataBaseArray.get(i)[7].equals("")) {
        list[i] = "Vacant Cubicle";
    }
    else if (dataBaseArray.get(i)[7].equals("")) {
        list[i] = dataBaseArray.get(i)[6];
    }
    else {
        list[i] = dataBaseArray.get(i)[7] + ", " + dataBaseArray.get(i)[6];
    }
}

// Populate the list
lstAdvance.setListData(list);

以下是我用来保存文件的内容:

try {
    saveFile = new FileWriter("Save Location");
    String newLine = System.getProperty("line.separator");

    for (int i = 0; i < dataBaseArray.size(); i++) {
        for (int j = 0; j < dataBaseArray.get(i).length; j++) {
            saveFile.append(dataBaseArray.get(i)[j] + ",");
        }
        saveFile.append(newLine);
    }
}
catch (IOException exc) {
    JOptionPane.showMessageDialog(this,"error", "error", JOptionPane.ERROR_MESSAGE);
}

共有3个答案

燕琨
2023-03-14

看到这个问题:JavaFileWriter与附加模式

问题是您的FileWriter对象需要是“附加模式”。然后,您使用“写入”方法而不是“附加”方法附加到文件中。使用最终捕获子句调用“关闭”。您不需要刷新(我不认为)。

长孙哲
2023-03-14

使用FileWriter和BufferedWriter试试。。。。

File f = new File("Your_Path");

FileWriter fw = new FileWriter(f);

BufferedWriter bw = new BufferedWriter(fw);

是的。。做bw是非常重要的。close()(关闭缓冲区)

苗盛
2023-03-14

写入文件是缓冲的。在写入结束时,您必须close()flush()您的写入程序(保存文件)。

更好的是:您应该在最终块中对您的编写器执行lock()

 类似资料:
  • 我读了一个word文档,想用Java写到另一个word文件中。我想要读取的文档中的内容的样式(字体、粗体、斜体、标题等)被写入,因为它是创建的新文档。我可以复制内容,但不能复制格式样式。 我得到的答案是复制相同格式的文本,但我无法复制数字。我执行了以下代码:

  • 问题内容: 我想知道如何将以下代码转换为将这些行输出到文本文件,而不是标准输出: 该属性文件是: 谢谢。 问题答案: 将ConsoleAppender更改为FileAppender。 我发现 有用。如果使用此选项,则必须为fileName添加一个属性,并且可能还要设置maxFileSize。这是一个示例(将它们放在log4j.properties文件中): 还有其他附加程序。 根据时间滚动。 不滚

  • 问题内容: 输出文件包含: 问题出在哪里?如何使用写入文本文件? 问题答案: 你必须写String … 你可以试试。 要么 要么

  • 问题内容: 我正在尝试编写一种方法(如果尚不存在),然后制作一个“ log.txt文件”,然后将其写入该文件。我遇到的问题是每次调用该方法时,它都会覆盖现有的日志。如何更改方法,以使它不会覆盖数据而是仅更新文件? 我的写入文件方法: 问题答案: 只需更改为

  • 我有以下节点。JS(使用Express运行)代码: 该路由用作对Spotify Web API的请求的回调,因此我可以获得访问令牌。 Spotify然后重定向到上面的回调函数,您可以通过查看“redirect_URI”在URI中看到它。 如果需要有关Spotify授权流的更多信息,请参见此处。 这是我用来向Spotify验证我的应用程序的URI。 https://accounts.spotify.

  • 问题内容: 我需要在文本文件的开头写入一些内容。我有一个包含内容的文本文件,我想在此内容之前写点东西。说我有; 先生,下午好,今天好吗? 我很好你怎么样? 感谢您的询问,我很棒 修改后,我希望它像这样: Page 1-Scene 59 25.05.2011 先生,下午好,今天好吗? 我很好你怎么样? 感谢您的询问,我很棒 刚刚组成的内容:)我如何以这种方式修改文本文件? 问题答案: 您无法真正 通