1

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

编辑:尝试/捕获代码。

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

缓冲区是字节[]。我什至检查了 Toast:缓冲区一切正常。它包含文件中的每个符号,但我无法以某种方式全部写入。

4

4 回答 4

2

您永远不应该像以前那样对文件路径进行硬编码。

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

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

如果您未在文件路径中指定 Environment.getExternalStorageDirectory,它将在您的应用安装文件夹中返回。

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

于 2012-10-10T23:03:49.770 回答
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();
于 2012-10-10T22:49:17.353 回答
-1

试着告诉你想在文件上写多少

fos.write(缓冲区,0,x);

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

于 2012-10-10T22:43:41.367 回答
-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"/>

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

于 2012-10-12T12:51:48.873 回答