2012-10-18 136 views
0

我正嘗試在我的設備上在SD上創建文件。這工作一週前,但現在不是,我不明白爲什麼。未在SD卡上創建Android文件

的logcat的打印:

java.io.FileNotFoundException ...pathtofile... (no such file or directory) 

那麼,是不是正在創建的文件。我對Android清單正確的權限:

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

我創建文件是這樣的:

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 
      base = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     } 
    String fname = File.separator +"VID_"+ timeStamp + ".3gp"; 
     mediaFile = new File(base+fname); 

然後我檢查它是否存在:

if(mediaFile.exists()){ 
      Log.v("mediaFile","ex"); 
     }else{ 
      Log.v("mediaFile","no ex"); 

     } 

和日誌說,它不存在。我也嘗試過file.createNewFile(),它不起作用。

所以,一個星期前它工作,現在它不工作,它可能是SD卡的問題?它可能是某種類型的BUG !!! ????

感謝

編輯:更多的代碼

在其中創建該文件的功能是:

private static File getOutputMediaFile() 

從名爲:

private static Uri getOutputMediaFileUri(){ 
     return Uri.fromFile(getOutputMediaFile()); 
    } 

而且設置好的給mediarecorder輸出:

vMediaRecorder.setOutputFile(getOutputMediaFileUri().toString()); 

所以,當我做mediarecorder.prepare():

try { 
      vMediaRecorder.prepare(); 

     } catch (IllegalStateException e) { 
      Log.v("RELEASE VIDREC1",e.toString()); 
      releaseMediaRecorder(); 
      return false; 
     } **catch (IOException e) { 
      Log.v("RELEASE VIDREC2",e.toString()); 
      releaseMediaRecorder(); 
      return false;** 
     } 

大膽美中不足的是,運行一個,並打印:

java.io.FileNotFoundException ...pathtofile... (no such file or directory) 
+0

是的,該文件未創建:( – JasJar

回答

1

只是試試這個

String fname = "VID_"+ timeStamp + ".3gp"; 

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
{ 
    mediaFile = new File(android.os.Environment.getExternalStorageDirectory(),fname); 
    if(!mediaFile.exists()) 
    { 
     mediaFile.createNewFile(); 
    } 
} 

if(mediaFile.exists()){ 
     Log.v("mediaFile","ex"); 
    }else{ 
     Log.v("mediaFile","no ex"); 

    } 
+0

好,謝謝,現在的logcat說,該文件存在,但問題是我將它作爲輸出文件發送到Mediarecorder.setoutputfile(uri.tostring()),其中uri是文件的路徑。當我執行mediarecorder.prepare時,打印出的io異常不存在具有該名稱的文件:S 。 – JasJar

1

您只需創建對象的媒體文件,而不是實際的文件。使用這個:

if(!f.exists()){ 
    f.createNewFile(); 
} 

我試過這個,對我來說它的工作原理。

final String filename = "file.3gp"; 
final String path = Environment.getExternalStorageDirectory() + "/" + filename; 
File outputfile = new File(path); 
if (!outputfile.exists()) { 
    try { 
     outputfile.createNewFile(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setOutputFile(outputfile.toString()); 
try { 
    recorder.prepare(); 
    recorder.start(); 
    /*recorder.stop(); 
    recorder.reset(); 
    recorder.release();*/ 
} 
catch (IllegalStateException e) { 
    e.printStackTrace(); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 

試試看看它是否有效。如果不是,你可以添加getOutputMediaFile()的完整代碼嗎?

+0

也是這個試過了,感謝 – JasJar

+0

@JasJar見另外,如果你沒有解決它了。 – stealthjong

0

我的回答here

首先打開的路徑,然後添加文件:

String dir = Environment.getExternalStorageDirectory(); // getAbsolutePath is not requried 
File path = new File(dir); 
File root = new File(path, "VID_"+ timeStamp + ".3gp";); 
+0

好的嘗試了這個,但修改字符串dir = Environment.getExternalStorageDirectory()。toString();我有同樣的結果,我與Sumant答案(見我的評論)。 – JasJar

0

感謝您的幫助,我已經解決了這個問題使用舊代碼。這很奇怪,因爲「文件保存」部分沒有修改。感謝所有人,有點兒。

相關問題