为什么这不读?

时间:2018-04-14 14:08:15

标签: java string io

我知道我没有正确地做某事。我知道该文件需要Serializable来读取文本文件。 我在主类上有实现Serializable。但是我的readText和我的writeText都没有转换 当我阅读和写出文件不是文本时,什么都没有进来。

public static ArrayList<String> readText()  {
    ArrayList<String> read = new ArrayList<String>();
    Frame f = new Frame();
    FileDialog foBox = new FileDialog(f, "Reading serialized file",
            FileDialog.LOAD);
    foBox.setVisible(true);

    String foName = foBox.getFile();
    String dirPath = foBox.getDirectory();
    File inFile = new File(dirPath + foName);
    BufferedReader in = null;

    ObjectInputStream OIS = null;

    try {
        in = new BufferedReader(new FileReader(inFile));
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    }

    String line = null;
    try {
        line = in.readLine();
    } catch (IOException e1) {

        e1.printStackTrace();

        while (line != null) {
            try {
                FileInputStream IS = new FileInputStream(inFile); 
                OIS = new ObjectInputStream(IS); 

                inFile = (File) OIS.readObject();

            } catch (IOException io) {
                io.printStackTrace(); 
                System.out.println("An IO Exception occurred");
            }

            catch (ClassNotFoundException cnf) {
                cnf.printStackTrace(); // great for debugging!
                System.out.println("An IO Exception occurred");
            } finally 
            {
                try {
                    OIS.close();
                } catch (Exception e) {
                } 

            }
        }
    }

    return read;
}


public static void writeText(ArrayList<String> file) {
    ArrayList<String> write = new ArrayList<String>();

    Frame f = new Frame();

    FileDialog foBox = new FileDialog(f, "Saving customer file",
            FileDialog.SAVE);
    foBox.setVisible(true);

    String foName = foBox.getFile();
    String dirPath = foBox.getDirectory();

    File outFile = new File(dirPath + foName);

    PrintWriter out = null;

    try {
        out = new PrintWriter(new BufferedWriter(new FileWriter(outFile)));

        for (int i = 0; i < write.size(); i++) {
            String w = write.get(i);
            out.println(file.toString());
        }
    }

    catch (IOException io) {
        System.out.println("An IO Exception occurred");
        io.printStackTrace();
    } finally {
        try {
            out.close();
        } catch (Exception e) {
        } 
    }
}

1 个答案:

答案 0 :(得分:0)

  

什么都没有进来

你永远不会调用read.add(line)并且你试图在catch块内的无限循环内读取文件,只有当你无法读取文件时才会输入

只需使用一个try块,意味着尝试一次打开并读取文件,否则,如果无法打开文件,则没有理由继续尝试读取文件

 List<String> read = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(inFile)) {
    String line = null;
    while ((line = in.readLine()) != null) {
        read.add(line);  // need this 
    } 
} catch (Exception e) {
    e.printStackTrace();
}
return read;

现在,无论你对这个序列化的对象做什么,这是完全独立的,并且它不是需要设置为Serializable的文件或主类,它是你使用writeObject的任何对象方法。但是,您正在读取和编写已经可序列化的String对象。

  

当我写出文件不是文本

不确定你的意思不是文字,但如果你按照上面的代码,你就会得到初始文件中的内容......无论如何,你不需要write列表变量。<登记/> 您必须改为使用ArrayList<String> file参数的各行,而不是file.toString()

for (String line:file) {
    out.println(line);
}
out.close(); // always close your files and writers