![](/img/trans.png)
[英]BitmapFactory open failed: ENOENT (No such file or directory)
[英]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.