2014-02-21 4 views
1

가짜 CSV 파일을 쓰려고하는데, IOException이 발생합니다. 파일을 찾을 수 없습니다. 내 코드는 정확하지만 어딘가에 놓친 것 같습니다 ... android FileWriter가 파일을 열 수 없습니다. (파일을 찾을 수 없습니다)

java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.swimtechtest.swimmer/files/swimmer/trainings/myFirstTraining.csv: open failed: ENOENT (No such file or directory) 
at libcore.io.IoBridge.open(IoBridge.java:409) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 
at java.io.FileWriter.<init>(FileWriter.java:42) 
at ...swimmer.database.DatabaseHandler.putFakeTraining(DatabaseHandler.java:86 

디렉토리 /storage/emulated/0/Android/data/com.swimtechtest.swimmer/files/ : 예외가 filewriter = 새로운 FileWriter 라인 여기

java.io.File file; 
file = new File(context.getExternalFilesDir(null), "/swimmer/trainings/"); 
String mTrainingsPath = file.getPath(); 

String csvFilePath = mTrainingsPath + java.io.File.separator + training.filename;  
file = new File(csvFilePath); 

try { 
FileWriter fileWriter = new FileWriter(file); 
PrintWriter csvOut = new PrintWriter(fileWriter); 

String data = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.\\n" 
+ " Cras facilisis elit eu nisl laoreet mollis.\\n" 
+ " In feugiat nec elit at tincidunt."; 

csvOut.println(data); 
csvOut.close(); 

} catch(IOException e) { 
Log.e(TAG, "IOException in creating csv file"); 
Log.e(TAG, "STACKTRACE"); 
Log.e(TAG, Log.getStackTraceString(e)); 
} 

에 발생하는 로그 파일입니다 수영/훈련/존재 (이전에 생성 됨)

+0

확인해보십시오. http://stackoverflow.com/questions/11620641/android-error-open-failed-enoent –

답변

2

디렉토리를 만들어야합니다. 현재 로컬 변수가 file 인 경우 file.mkdirs()으로 전화를 걸어 작성하십시오. 디렉토리가 이미 존재하면 오류가 발생하지 않으므로 디렉토리를 사용하기 전에 보통 mkdirs()을 호출하면됩니다. 또는 exists()을 사용하여 해당 번호가 있는지 확인한 다음 필요한 경우 mkdirs()으로 전화하십시오.

+0

제안 해 주셔서 감사합니다. 내 앱에서 확인한대로 디렉토리가 존재했는지 100 % 확신했습니다. '표준'교육 파일을 추가하기 전에 ....하지만이 경우에는 앱이 시작될 때이 가짜 교육을 직접 생성합니다 (고객 기능 요청이 나중에 추가됨).이 경우 디렉토리가 존재하지 않습니다! 더 나은 검사 7 번 ... – erwin