【发布时间】:2016-10-15 15:08:33
【问题描述】:
我一直在尝试加密文件并将这些文件写回到同一个地方。但我收到错误消息说"java.io.FileNotFoundException: /storage/emulated/0/New file.txt: open failed: EACCES (Permission denied)".
我的Manifest文件是这个
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tdk.mytestapplication2">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
我想我在那里提供了正确的许可。我用来加密文件的代码就是这个。
public static void encrypt(SecretKey secretKey, String filePath){
try {
// Here you read the cleartext.
FileInputStream fis = new FileInputStream(filePath);
// This stream write the encrypted text. This stream will be wrapped by another stream.
FileOutputStream fos = new FileOutputStream(filePath);
// Create cipher
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// Wrap the output stream
CipherOutputStream cos = new CipherOutputStream(fos, cipher);
// Write bytes
int b;
byte[] d = new byte[8];
while ((b = fis.read(d)) != -1) {
cos.write(d, 0, b);
}
// Flush and close streams.
cos.flush();
cos.close();
fis.close();
}catch(IOException e){
e.printStackTrace();
}catch (NoSuchAlgorithmException e){
e.printStackTrace();
}catch(NoSuchPaddingException e){
e.printStackTrace();
}catch(InvalidKeyException e){
e.printStackTrace();
}
}
我在按钮中使用了这个方法
Button btnEncrypt = (Button) findViewById(R.id.btnEnc);
btnEncrypt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
aesKey = EncAndDec.generateKey();
String filePath = editText.getText().toString();
//Generating the file hash
String md5Hash = MD5Hash.getMD5(filePath);
System.out.println(aesKey.toString());
System.out.println(filePath);
System.out.println(md5Hash);
//Encrypting the file
for(int i=1; i<100; i++) {
EncAndDec.encrypt(aesKey, filePath);
}
}
});
我仍然无法配置此错误。请有人帮忙!
【问题讨论】:
-
请同时确认:
/storage/emulated/0/New file.txt:文件是否存在?当您浏览您的设备时,您会看到它吗? -
@ishmaelMakitla hmmm 因为消息是“权限被拒绝”,那么文件确实存在(如果不存在,消息将是“找不到文件”)
-
问题是您的错误包括
java.io.FileNotFoundException: /storage/emulated/0/New file.txt...,因此我问您是否已确认该文件确实存在 - 在这种情况下,错误可能会产生误导。但是在你的情况下事情看起来很奇怪,因为你声明了权限但你仍然得到Permission Denied- 所以请交叉检查文件本身是否存在。 -
@Tharindu 你运行的是什么版本的Android?
标签: java android android-permissions