0

ファイルを作成して書き込もうとしていますが、FileNotFoundException毎回取得します。使用している方法は次のとおりです。

public void saveFileAsPRN(Context context){
    byte[] dataFile = getPrintableFileData();


    String filename = "TestPrn.prn"; 

    // instantiate a file object using the path
    File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), filename);
    Log.e(TAG, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString());

    //determine if the media is mounted with read & write access
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        Log.e(TAG, "media mounted"); //good
    }else{
        Log.e(TAG, "media NOT mounted"); //bad
    }

    //create directory if it does not exist
    //the default Download directory should always exist
    if (!file.mkdirs()) {
        Log.e(TAG, "Directory not created");
    }

    // determine if the file exists, create it if it does not
    if(!file.exists()){
        try {
            Log.e(TAG, "File does not exist, creating..");
            file.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }else{
        Log.e(TAG, "File Exists");
    }    

    //this makes the blank file visible in the file browser
    MediaScannerConnection.scanFile(context, new String[]{Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/" + filename}, null, null);

    //create output stream - send data; saving to file
    OutputStream out = null;
    try {           
        FileOutputStream fos = null;
        fos = new FileOutputStream(file); // <---- CRASHES HERE; FileNotFoundException              
        out = new BufferedOutputStream(fos);
        out.write(dataFile);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        try {
            out.flush();
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   
}

AFileNotFoundExceptionは次の行で発生します。

fos = new FileOutputStream(file); // <---- CRASHES HERE;

ディレクトリが存在し、ターゲット ディレクトリに空のファイルが作成されます (PC でターゲット フォルダを参照すると表示されます)。

canWrite()オブジェクトでメソッドを呼び出すとFiletrue が返されます - i have write access.

マニフェストには以下が含まれます: android.permission.WRITE_EXTERNAL_STORAGE"

だから私はアイデアがありません。何人かの人々が同様の問題を抱えているのを見ていますが、答えが見つかりません。

4

2 に答える 2

0

次のコードをコメントアウトすると、問題が修正されました。

//create directory if it does not exist
//the default Download directory should always exist
if (!file.mkdirs()) {
    Log.e(TAG, "Directory not created");
}

そのコードは空のファイルを作成しますが、フォルダーに含まれていることがわかりますが、非常に誤解を招きます。このファイルは何もできません。デバイスから PC に転送しようとしましたが、できませんでした。開くこともできません。コードでストリームを開くことはできません。

于 2013-10-16T09:39:16.367 に答える