替换现有文件,长度问题

时间:2017-11-20 14:01:03

标签: java android file stream

我有一个奇怪的问题,当用另一个文件替换文件时。 这段代码第一次运作良好:

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! :)

3 个答案:

答案 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();
    }

参考:this question

答案 2 :(得分:0)

首先请注意,String.getBytes()没有charset的可选参数,取得当前平台的参数。

如需追加,则需要致电:

FileOutputStream fileOutputStream = new FileOutputStream(filePath, true);

在你的情况下,你想要替换内容,你的构造已经这样做了。删除delete,因为这样可以提供更好的系统行为。

然后最后的问题只写4个字节。

   bufferedOutputStream.write(fileContent.getBytes());

好像旧文件长度(“test”= 4个字节)用于写入新内容。我无法解释,因此删除delete可能会导致错误消失。

可能是这种情况,该文件是在其他地方打开的。