簡體   English   中英

createNewFile - 打開失敗:ENOENT(沒有這樣的文件或目錄)

[英]createNewFile - open failed: ENOENT (No such file or directory)

我無法弄清楚這里出了什么問題...我已經嘗試過更簡潔地寫這個,但是沒有用。 在閱讀了有關此問題的其他建議后,我輸入了所有額外的字符串。 沒有幫助。 不知道發生了什么。 它可能與權限相關嗎? AFAIK我正在嘗試寫入內部存儲器並且不需要特殊權限?

public void outputBitmap(){ 
    String path = Environment.DIRECTORY_PICTURES.toString();
    File folder = new File(path + "/Blabla");
    String filename = new SimpleDateFormat("yyMMddHHmmss").format(Calendar.getInstance().getTime()) + ".png";
    try {
        if (!folder.exists()) {
            folder.mkdirs();
            System.out.println("Making dirs");
        }
        File myFile = new File(folder.getAbsolutePath(), filename);
        myFile.createNewFile();

        FileOutputStream out = new FileOutputStream(myFile);
        myBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.flush();
        out.close();

    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
}

它每次都是“制作dirs”,目錄不是留下來的,或者其他東西。 當它到達myFile.createNewFile(); 它給出錯誤消息“打開失敗:ENOENT(沒有這樣的文件或目錄)”

不確定它是否相關,但我嘗試輸出的信息來自:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    myBitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.RGB_565);
    Canvas pngCanvas = new Canvas(myBitmap);
    ...[some maths and stuff]
    canvas.drawLine(...);
    pngCanvas.drawLine(...);
}

我以為我應該能夠為位圖使用相同的畫布,但這會導致崩潰,所以我將相同的信息寫入兩個畫布。 所以......我不知道這是與問題有關還是與完全不同的不良問題有關。

一直在搜索似乎相似的各種問題,但找不到任何適合我的解決方案。 我一直試圖解決這個問題好幾天了。 誰知道出了什么問題?

謝謝

您沒有正確使用Environment.DIRECTORY_PICTURES。 它本身不是文件夾,您需要將其用作getExternalStoragePublicDirectory()方法的參數。 點擊此處: http//developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String)

可能的問題:

確保您在清單文件中提供了以下必需的權限。

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

對於Marhsmallow設備,請確保設備用戶也授予了“聯系人組權限”。
參考: http//developer.android.com/training/permissions/requesting.html

只需更改代碼的開頭即可:

public void outputBitmap(){ 
    String path = Environment.DIRECTORY_PICTURES.toString();
    File folder = new File(path + "/Blabla");

對此:

public void outputBitmap(){File folder = new File(getActivity().getExternalFilesDir(null) + IMAGE_DIRECTORY + "whatever you want for your directory name");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM