我知道我没有正确地做某事。我知道该文件需要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) {
}
}
}
答案 0 :(得分:0)
什么都没有进来
你永远不会调用read.add(line)
并且你试图在catch块内的无限循环内读取文件,只有当你无法读取文件时才会输入1} EM>
只需使用一个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