2013-02-02 104 views
0

美好的一天。無法在android中保存文件

我需要將PKCS10 CSR保存在外部存儲卡中。

然而,下面的代碼顯示一個錯誤

java.io.FileNotFoundException:/storage/sdcard0pkcs10.req:打開失敗:EROFS(只讀文件系統)

雖然AndoidManifest.xml正確包括

我覺得這個問題是目錄路徑,因爲它顯示爲0,而不是/

package exam.blowfishcipher; 

import java.io.FileWriter; 
import java.io.OutputStreamWriter; 
import java.security.*; 
import org.spongycastle.jce.provider.BouncyCastleProvider; 
import java.security.SecureRandom; 

import javax.security.auth.x500.X500Principal; 

import org.spongycastle.jce.PKCS10CertificationRequest; 
import org.spongycastle.openssl.PEMWriter; 

import android.os.Environment; 
import android.util.*; 
import android.widget.*; 

public class PKCS10Generater 
{ 
    static { 
     Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider()); 
    } 

    public static PKCS10CertificationRequest generateRequest(
      KeyPair pair) 
      throws Exception 

      {   
      return new PKCS10CertificationRequest(
        "SHA256withRSA", 
        new X500Principal("CN=Test CA Certificate"), 
        //new X500Principal("CN=end"), 
        pair.getPublic(), 
        null, 
        pair.getPrivate()); 
      } 

    public static void pemEncodeToFile(String filename, Object obj, char[] password) throws Exception{ 
     PEMWriter pw = new PEMWriter(new FileWriter(filename)); 
      Log.e("Position", "PEMWriter"); 
      if (password != null && password.length > 0) { 
       pw.writeObject(obj, "DESEDE", password, new SecureRandom()); 
      } else { 
       pw.writeObject(obj); 
      } 
      pw.flush(); 
      pw.close(); 
    } 

    public static void reqGen() throws Exception 
    { 
     //create the keys 
     Log.e("Position", "reqGen"); 
     KeyPair pair = Utils.generateRSAKeyPair(); 

     //modified 20130203 
     PKCS10req pkcs10req = new PKCS10req(); 
     PKCS10CertificationRequest request = pkcs10req.generateRequest(pair); 

     pemEncodeToFile(Environment.getExternalStorageDirectory()+"pkcs10.req", request, null); 
     Log.e("Position", "getExternalStorage"); 
     PEMWriter pemWrt = new PEMWriter(new OutputStreamWriter(System.out)); 
     pemWrt.writeObject(request); 
     pemWrt.close(); 

    } 
} 
+1

你有正確的WRITE_EXTERNAL_STORAGE許可?否則,該設備實際上可能不允許您寫入外部存儲器... – hwrdprkns

+0

如果您在清單中擁有正確的權限,是否可以使用'adb shell'來檢查是否可以在該文件夾中實際寫入 – Matthieu

+0

看起來你不喜歡沒有作者權限,請嘗試使用代碼寫入其他文件。 – ObAt

回答

0

就修改該行

pemEncodeToFile(Environment.getExternalStorageDirectory()+"pkcs10.req", request, null); 

pemEncodeToFile(Environment.getExternalStorageDirectory()+"/pkcs10.req", request, null); 
+0

錯誤顯示此路徑:/storage/sdcard0pkcs10.req,所以我不認爲它缺少'/' – ObAt