将文件写入Android中的外部存储失败

时间:2015-07-30 03:09:17

标签: java android android-external-storage nexus-5

正如标题所指出的,我在将文件写入外部存储器时遇到了麻烦。我的调试设备是Nexus 5.问题是,我能够从设备中完美地读取文件(我一直在尝试使用下载文件夹中的文件),但无法编写它们。我知道我必须在设备未连接到计算机时执行此操作。但它也不起作用。

事实上,我已经尝试在写入SD卡之前阅读SD卡的状态(当然,这不起作用)。当设备连接到我的PC时,状态显示为“已安装”。我将状态与Environment.MEDIA_MOUNTED_READ_ONLYEnvironment.MEDIA_MOUNTED进行了比较,没有任何成功。我的设备不属于这些状态。

您必须知道的一件事是我的手机没有外置SD卡,因为它是内部SD卡。这导致我的设备具有外部存储的“/ storage / emulated / 0 / ...”目录。

我还必须指出,我已在Android Manifest中实现了以下标记:

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

我对可能发生的事情一无所知。另一件可能有用的事情是我尝试使用winrar管理文件(适用于Android),并且我已经能够使用连接到我的PC的设备删除文件,并且无需连接。所以我不知道该怎么做。

我用来编写文件的代码如下。请记住它应该读取一个图像文件(它做),将其转换为字符串,将其转换回图像,然后将其保存到下载文件夹:

 File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/base_image.jpg");
 // Reading a Image file from file system
 FileInputStream imageInFile = new FileInputStream(file);
 byte imageData[] = new byte[(int) file.length()];
 imageInFile.read(imageData);

 // Converting Image byte array into Base64 String
 String imageDataString = encodeImage(imageData);

 // Converting a Base64 String into Image byte array
 byte[] imageByteArray = decodeImage(imageDataString);

 File newFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "converted_image.jpg");

 //Write a image byte array into file system
 FileOutputStream imageOutFile = new FileOutputStream(newFile);

 imageOutFile.write(imageByteArray);

 imageInFile.close();
 imageOutFile.close();

我该怎么办?

2 个答案:

答案 0 :(得分:5)

只需将ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE中的android.permission.WRITE_EXTERNAL_STORAGE修复为uses-permission

我遇到过这个问题,许可中的大写没有用。

答案 1 :(得分:3)

如果文件不存在,FileOutputStream不会自动创建文件。

因此,您需要检查并创建您的文件是否存在。

if(!newFile.exists()) {
    newFile.createNewFile();
} 

希望这有帮助!