我正在编写一个必须通过蓝牙发送一些文件的应用程序。 客户端接收一个字节数组,然后必须将其构造成文件。但只有几行数组被复制到文件中! 这是我的线程代码,其中读取了来自服务器的每条消息:
编辑:尝试/捕捉代码。
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检查过:缓冲区一切都很好。它包含文件中的每个符号,但我无法以某种方式编写它。
答案 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
。您必须首先卸载它,然后才能在应用程序中访问它。