我有一个奇怪的问题,当用另一个文件替换文件时。 这段代码第一次运作良好:
public class Status {
Move move = new Move();
int y;
public void setStatus(Move move) {
this.y = move.getY();
}
public void getStatus() {
System.out.println(this.y);
}
}
它创建一个包含以下内容的文件:
String fileContent = "test";
File file = new File(Environment.getExternalStorageDirectory() + "/myApp/text.txt");
file.getParentFile().mkdirs();
if (file.exists())
file.delete();
try {
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
bufferedOutputStream.write(fileContent.getBytes());
bufferedOutputStream.close();
fileOutputStream.close();
} catch (Exception exception) {
exception.printStackTrace();
}
然后我再次执行代码,用更长的字符串替换“test”字符串:
test
删除旧文件,创建一个新文件,但它只写下4个第一个字符:
String fileContent = "admiral";
最后,如果我用较短的字符串替换内容(“be”,它会创建一个损坏的文件:
admi
但如果我手动删除文件,它就可以工作......很奇怪......
已解决:问题是,gedit的缓存! :顺便说一下thx all for your help! :)
答案 0 :(得分:0)
尝试使用以下内容覆盖内容:
FileOutputStream fileOutputStream = new FileOutputStream(filePath, false);
答案 1 :(得分:0)
我不明白为什么你需要使用BufferedOutputStream
...
只需尝试以这种方式使用FileOutputStream
进行编写:
String fileContent = "test";
File file = new File(Environment.getExternalStorageDirectory() + "/myApp/text.txt");
file.getParentFile().mkdirs();
if (file.exists())
file.delete();
try {
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
fileOutputStream.write(fileContent.getBytes());
fileOutputStream.close();
} catch (Exception exception) {
exception.printStackTrace();
}
答案 2 :(得分:0)
首先请注意,String.getBytes()
没有charset的可选参数,取得当前平台的参数。
如需追加,则需要致电:
FileOutputStream fileOutputStream = new FileOutputStream(filePath, true);
在你的情况下,你想要替换内容,你的构造已经这样做了。删除delete
,因为这样可以提供更好的系统行为。
然后最后的问题只写4个字节。
bufferedOutputStream.write(fileContent.getBytes());
好像旧文件长度(“test”= 4个字节)用于写入新内容。我无法解释,因此删除delete
可能会导致错误消失。
可能是这种情况,该文件是在其他地方打开的。