Android 中将文件写入外部存储失败
Writing files to external storage in Android failing
正如标题所指出的,我无法将文件写入外部存储器。我的调试设备是 Nexus 5。问题是,我能够从设备中完美读取文件(我一直在尝试使用下载文件夹中的文件)但无法写入它们。我知道我必须在设备未连接到计算机时执行此操作。但是也没用。
事实上,我试过在写入 SD 卡之前先读取它的状态(当然没有用)。无论设备是否连接到我的电脑,状态都显示为 "mounted"。我将状态与 Environment.MEDIA_MOUNTED_READ_ONLY
和 Environment.MEDIA_MOUNTED
进行了比较,但没有成功。我的设备处于这些状态中的 none 个。
你必须知道的一件事是我的 phone 没有外置 SD 卡,因为它是内置的。这导致我的设备有一个“/storage/emulated/0/...”外部存储目录。
我还必须指出,我在我的 Android 清单中实现了以下标签:
<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();
我该怎么办?
如果文件不存在,FileOutputStream 不会自动创建文件。
因此,如果您的文件不存在,您需要检查并创建。
if(!newFile.exists()) {
newFile.createNewFile();
}
希望对您有所帮助!
只需在 uses-permission
中将 ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE
修改为 android.permission.WRITE_EXTERNAL_STORAGE
。
我遇到过这个问题,权限中的UPPERCASE没有用。
正如标题所指出的,我无法将文件写入外部存储器。我的调试设备是 Nexus 5。问题是,我能够从设备中完美读取文件(我一直在尝试使用下载文件夹中的文件)但无法写入它们。我知道我必须在设备未连接到计算机时执行此操作。但是也没用。
事实上,我试过在写入 SD 卡之前先读取它的状态(当然没有用)。无论设备是否连接到我的电脑,状态都显示为 "mounted"。我将状态与 Environment.MEDIA_MOUNTED_READ_ONLY
和 Environment.MEDIA_MOUNTED
进行了比较,但没有成功。我的设备处于这些状态中的 none 个。
你必须知道的一件事是我的 phone 没有外置 SD 卡,因为它是内置的。这导致我的设备有一个“/storage/emulated/0/...”外部存储目录。
我还必须指出,我在我的 Android 清单中实现了以下标签:
<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();
我该怎么办?
如果文件不存在,FileOutputStream 不会自动创建文件。
因此,如果您的文件不存在,您需要检查并创建。
if(!newFile.exists()) {
newFile.createNewFile();
}
希望对您有所帮助!
只需在 uses-permission
中将 ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE
修改为 android.permission.WRITE_EXTERNAL_STORAGE
。
我遇到过这个问题,权限中的UPPERCASE没有用。