我一直在尝试打开一个文本文件,并将每一行保存为一个arraylist的内容。一旦完成,我想将其保存回文件。我已经遇到了很长时间的错误,并尝试了很多技巧。我发现由于某种原因,文件本身没有被创建。这可能只是一个我忽视的简单错误,但如果你能提供任何帮助,我将感激不尽。
以下是代码:
public void addToFile(){
File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/appName/savedlocations");
root.mkdirs();
File fileName = new File(root, "locationslatitude.txt");
File fileName2 = new File(root, "locationslongitude.txt");
String file = fileName.toString();
String file2 = fileName2.toString();
String theContent = Double.toString(currLatitude);
String theContent2 = Double.toString(currLongitude);
s = new Scanner(file);
while (s.hasNext()){
fileList.add(s.next());
}
s.close();
fileList.add(theContent);
s2 = new Scanner(file2);
while (s2.hasNext()){
fileList2.add(s2.next());
}
s2.close();
fileList2.add(theContent2);
try {//works for latitude file
FileWriter writer = new FileWriter(file);
for(String str: fileList) {
writer.write(str);
writer.write("\r\n");
}
writer.close();
} catch (java.io.IOException error) {
//do something if an IOException occurs.
Toast.makeText(this, "Cannot Save Back To A File", Toast.LENGTH_LONG).show();
}
//save the arraylist back to its appropriate file
try {//works for longitude file
FileWriter writer = new FileWriter(file2);
for(String str2: fileList2) {
writer.write(str2);
writer.write("\r\n");
}
writer.close();
} catch (java.io.IOException error) {
//do something if an IOException occurs.
Toast.makeText(this, "Cannot Save Back To A File", Toast.LENGTH_LONG).show();
}
}
我相信我找到了问题的答案,我想把它发回到这里,所以如果其他人面临同样的问题,这可能对他们有帮助。
问题在于它没有创建文件。该目录是使用“root.mkdirs();”创建的。但是,文件未创建,我试图从不存在的文件中读取。这是我认为导致错误的原因。因此,为了解决这个问题,我将代码更改为:
try{
s = new Scanner(fileName);
while (s.hasNext()){
fileList.add(s.next());
}
s.close();
fileList.add(theContent);
}catch (FileNotFoundException ex){
ex.printStackTrace();
try{
fileName.createNewFile();
}catch (IOException e){
e.printStackTrace();
Toast.makeText(this, "Hit IOException for file one", Toast.LENGTH_SHORT).show();
}
}
try{
s2 = new Scanner(fileName2);
while (s2.hasNext()){
fileList2.add(s2.next());
}
s2.close();
fileList2.add(theContent2);
}catch (FileNotFoundException ex){
ex.printStackTrace();
try{
fileName2.createNewFile();
}catch (IOException e){
e.printStackTrace();
Toast.makeText(this, "Hit IOException for file two", Toast.LENGTH_SHORT).show();
}
}
这是我必须改变的唯一代码。保存回文件的代码工作正常。我希望这对某人有用,并感谢大家的帮助。
答案 0 :(得分:1)
您是否在AndroidManifest.xml中添加了以下权限?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 1 :(得分:1)
此代码适用于我的项目。您可以使用它将ArrayList内容保存到文本文件。确保事先创建了目录。只需遍历列表并使用println方法将其写入txt文件。
FileWriter outFile = new FileWriter(Environment.getExternalStorageDirectory().getAbsolutePath() + "/appName/savedlocations/nameoftextfile.txt");
PrintWriter out = new PrintWriter(outFile);
out.println("PRINT LINES WITH ME");
out.print("NOT NECCESSARILY A NEW LINE");
out.close(); // at the very end
不要忘记捕获IOException。
答案 2 :(得分:0)
首先检查设备上是否存在文件目录等
/ appName / savedlocations这些不存在的可能性很大。 appName或savedLocations的名称错误。使用某个文件资源管理器程序检查此项。告诉我们它是否存在。打印出
的完整路径名 Environment.getExternalStorageDirectory().getAbsolutePath() + "/appName/savedlocations
并查看它是否真的存在。只需下载一个用于查看文件的应用程序,或者我认为您也可以通过eclipse连接到该设备。如果您需要更多关于如何操作的信息,请告诉我们。但是,您应首先检查实际的错误消息并将其报告回来。
答案 3 :(得分:-3)
不要发明自己的序列化格式。 java已经有了。
ArrayList<String> files = ...; // whatever
// write the object to a file
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("filename.ser"));
out.writeObject(files);
out.close();
// read the object back
InputStream is = new FileInputStream("filename.ser");
ObjectInputStream ois = new ObjectInputStream(is);
ArrayList<String> newFiles = = (ArrayList)ois.readObject();
ois.close();