FileWriter没有写我的所有数据

时间:2014-06-10 11:10:46

标签: java io

所以,基本上它可行,但事实并非如此。它不会抛出任何错误,它只是没有完成写入文件。它确实读取了文件中的所有行,并且它们都已正确格式化。我试过调试所有这些。调试“currentLine”时,所有行都会显示并正确格式化;但是,如果我检查我正在写入的文件,它会完美地写出一些文件,然后最后会切断它。就像节目没有足够的时间来杀死自己一样。

我的猜测是写作需要一段时间,程序在文件写完之前就被终止了,如果是这样的话,我怎么能避免呢?

这是代码。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class Main {

    BufferedReader fileReader;
    BufferedWriter fileWriter;

    private Main() {
        try {
            fileReader = new BufferedReader(new FileReader("File/spawn-config.cfg"));
            fileWriter = new BufferedWriter(new FileWriter("Dumped/world_npcs.json"));
            loadFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void loadFile() {
        String currentLine;
        try {
            fileWriter.write("[\n");
            while((currentLine = fileReader.readLine()) != null) {
                if(!currentLine.startsWith("//") && !currentLine.startsWith("[")
                        && !currentLine.startsWith("/*")) {
                    System.err.println(currentLine);
                    String[] array = currentLine.split("\\t");
                    String npcID = array[0].substring(7);
                    String xPos = array[1];
                    String yPos = array[2];
                    String zPos = array[3];
                    String walk = "false";
                    String radius = "0";
                    //-----------------------
                    fileWriter.write("{\n");
                    fileWriter.write("\"npc-id\": "+npcID+"\n");
                    fileWriter.write("\"position\": {\n");
                    fileWriter.write("\"x\": " + xPos + "\n");
                    fileWriter.write("\"y\": " + yPos + "\n");
                    fileWriter.write("\"z\": " + zPos + "\n");
                    fileWriter.write("},\n");
                    fileWriter.write("\"walking-policy\": {\n");
                    fileWriter.write("\"coordinate\": false, \"radius\": 0\n");
                    fileWriter.write("}\n},");
                }               
            }

            fileWriter.write("]");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] params) {
        new Main();
    }

}

1 个答案:

答案 0 :(得分:1)

如果您已准备好写入flush并关闭输出流

 fileWriter.flush();
 fileWriter.close();