从android中的byte []写入文件失败

时间:2012-10-10 22:35:09

标签: java android file-io

我正在编写一个必须通过蓝牙发送一些文件的应用程序。 客户端接收一个字节数组,然后必须将其构造成文件。但只有几行数组被复制到文件中! 这是我的线程代码,其中读取了来自服务器的每条消息:

编辑:尝试/捕捉代码。

try {   
    FileOutputStream fos = new FileOutputStream("//mnt//sdcard//" + fileName);    
    fos.write(buffer);
    fos.close();
}
catch(FileNotFoundException e) {
    Log.d("FAIL", e.toString());
    }
catch (IOException e) {
    Log.d("FAIL", e.toString());
}

缓冲区是byte []。我甚至用Toast检查过:缓冲区一切都很好。它包含文件中的每个符号,但我无法以某种方式编写它。

4 个答案:

答案 0 :(得分:2)

你永远不应该像你那样硬编码文件路径。

在android中,你应该使用Environment.getExternalStorageDirectory

String fname = Environment.getExternalStorageDirectory() + "myfile.jpg";
File file = new File( fname );

如果未在文件路径中指定Environment.getExternalStorageDirectory,则会在应用安装文件夹中返回。

在您的情况下,此文件可能已写入“com.your.package / test.jpg”

答案 1 :(得分:1)

您可以尝试使用的示例是:

FileOutputStream outputStream = new FileOutputStream(new File(context.getCacheDir(), FILENAME), false);
OutputStream out = new BufferedOutputStream(outputStream);
byte[] loginBuffer = new byte[1024];
int byteRead = 0;
while((byteRead = in.read(loginBuffer)) != -1) {
    out.write(loginBuffer, 0, byteRead);
}
out.close();

答案 2 :(得分:-1)

告诉您要在文件上写多少

fos.write(buffer,0,x);

其中x是缓冲区的大小(以字节为单位) 0是偏移量

答案 3 :(得分:-1)

我认为最可能的罪魁祸首是你的应用没有写权限。

请参阅https://sites.google.com/site/androidhowto/how-to-1/save-file-to-sd-card

  

您需要将以下内容添加到AndroidManifest.xml:

     

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

     

注意:如果您尝试在计算机上安装SD卡时打开/创建文件,则可以获得FileNotFoundException。您必须首先卸载它,然后才能在应用程序中访问它。