如何在Android中将字节数组写入文件?

19

这是我创建文件的代码。

public void writeToFile(byte[] array) 
{ 
    try 
    { 
        String path = "/data/data/lalallalaa.txt"; 
        FileOutputStream stream = new FileOutputStream(path); 
        stream.write(array); 
    } catch (FileNotFoundException e1) 
    { 
        e1.printStackTrace(); 
    } 
} 

当我尝试通过调用路径String path = "/data/data/lalallalaa.txt";将文件发送到服务器时,我会得到以下logcat错误消息:

03-26 18:59:37.205: W/System.err(325): java.io.FileNotFoundException: /data/data/lalallalaa.txt

我不明白为什么它找不到一个“理论上”已经创建的文件。


2
不要忘记在使用完流之后关闭它。 - ratchet freak
4个回答

19

我认为你最好添加FileOutputStream的关闭功能以清除代码。

这对我完美地起作用了。

try {
    if (!file.exists()) {
        file.createNewFile();
    }
    FileOutputStream fos = new FileOutputStream(file);
    fos.write(bytes);
    fos.close();
} catch (Exception e) {
    Log.e(TAG, e.getMessage());
}

12

你确定该文件已经被创建了吗?

尝试添加这个:

File file = new File(path);
if (!file.exists()) {
  file.createNewFile();
}

是的,那是正确的。我实际上并没有创建一个新文件。不知道那个方法,也不知道它是必要的。谢谢。 - EGHDK
@EGHDK 文档隐含地表示文件将被创建:“如果文件存在但是一个目录而不是一个常规文件,不存在但无法创建,或者由于任何其他原因无法打开,则会抛出FileNotFoundException异常。” - undefined

8

/data/data/是Android中的特权目录。应用程序无法写入此目录或从中读取。

相反,您应该使用context.getFilesDir()来查找有效的文件名。


0

如果文件不存在或者您试图写入只读文件,则会抛出此异常。另外,请尝试使用完整路径名并查看是否发生相同的异常(以检查您是否提供了正确的相对路径)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接