2012-01-19 8 views
1

ファイルをAndroidの外部記憶装置に書き込もうとしています。私はエラー "java.io.FileNotFoundException:/mnt/sdcard/Survey.txt(ディレクトリです)を取得し続けます。"これは、次のようなコードが含まれている方法は次のとおりです。外部記憶装置に書き込むファイルの機種を指定する

public String sendFile(System system) throws FileNotFoundException { 

    File writeable = new File(Environment.getExternalStorageDirectory() 
      .getAbsolutePath() + "/Survey.txt"); 
    try { 
     writeable.createNewFile(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    try { 

     Log.w("Before FO", "***"); 
     if (!Environment.getExternalStorageState().equals(
       Environment.MEDIA_MOUNTED)) { 
      Toast.makeText(context, "External SD card not mounted", 
        Toast.LENGTH_LONG).show(); 
     } else { 
      FileOutputStream f = new FileOutputStream(writeable); 
      Log.w("before write", "0"); 

      f.write("HELLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO".getBytes()); 
      Log.w("before write", "1"); 
      f.close(); 
     } 
    } catch (Exception e) { 
     Log.w("Write sd", e.toString()); 
    } 

    return writeable.getAbsolutePath(); 
} 

私はプログラムが(「FO前に」、「*」)Log.wので、たFileOutputStreamの減速にクラッシュされて信じています。実行します。私はこの問題の答えを数日間探しているので、どんな助けでも大歓迎です。ありがとう!

01-19 14:07:33.839: W/Before FO(641): *** 
01-19 14:07:33.857: W/Write sd(641): java.io.FileNotFoundException: /mnt/sdcard/Survey.txt (Is a directory) 
01-19 14:07:33.857: W/Write sd(641): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 
01-19 14:07:33.857: W/Write sd(641): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:239) 
01-19 14:07:33.857: W/Write sd(641): at java.io.FileOutputStream.<init>(FileOutputStream.java:101) 
01-19 14:07:33.857: W/Write sd(641): at java.io.FileOutputStream.<init>(FileOutputStream.java:77) 
01-19 14:07:33.857: W/Write sd(641): at premise.survey.IOInterface.sendFile(IOInterface.java:315) 
01-19 14:07:33.857: W/Write sd(641): at premise.survey.PremiseSurveyActivity.onClick(PremiseSurveyActivity.java:1119) 
01-19 14:07:33.857: W/Write sd(641): at android.view.View.performClick(View.java:3110) 
01-19 14:07:33.857: W/Write sd(641): at android.view.View$PerformClick.run(View.java:11934) 
01-19 14:07:33.857: W/Write sd(641): at android.os.Handler.handleCallback(Handler.java:587) 
01-19 14:07:33.857: W/Write sd(641): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-19 14:07:33.857: W/Write sd(641): at android.os.Looper.loop(Looper.java:132) 
01-19 14:07:33.857: W/Write sd(641): at android.app.ActivityThread.main(ActivityThread.java:4123) 
01-19 14:07:33.857: W/Write sd(641): at java.lang.reflect.Method.invokeNative(Native Method) 
01-19 14:07:33.857: W/Write sd(641): at java.lang.reflect.Method.invoke(Method.java:491) 
01-19 14:07:33.857: W/Write sd(641): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
01-19 14:07:33.857: W/Write sd(641): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
01-19 14:07:33.857: W/Write sd(641): at dalvik.system.NativeStart.main(Native Method) 
01-19 14:07:33.857: I/ActivityManager(73): Starting: Intent { act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity (has extras) } from pid 641 
01-19 14:07:33.857: W/WindowManager(73): Failure taking screenshot for (230x341) to layer 21020 
01-19 14:07:34.027: I/ActivityManager(73): Starting: Intent { act=android.intent.action.SEND typ=plain/text flg=0x3000000 cmp=com.android.email/.activity.MessageCompose (has extras) } from pid 641 
01-19 14:07:35.269: I/ActivityManager(73): Displayed com.android.email/.activity.MessageCompose: +1s197ms (total +1s391ms) 
01-19 14:07:40.647: D/dalvikvm(252): GC_EXPLICIT freed 164K, 5% free 7462K/7815K, paused 4ms+3ms 
01-19 14:07:45.727: D/dalvikvm(269): GC_EXPLICIT freed 8K, 8% free 6305K/6791K, paused 13ms+5ms 
01-19 14:12:04.720: D/SntpClient(73): request time failed: java.net.SocketException: Address family not supported by protocol 
01-19 14:12:15.947: I/Email(293): ReconcilePopImapAccountsSync: start 
01-19 14:12:15.977: I/Email(293): ReconcilePopImapAccountsSync: done 
01-19 14:12:16.137: D/dalvikvm(293): GC_CONCURRENT freed 236K, 8% free 7787K/8391K, paused 4ms+7ms 
01-19 14:12:16.137: W/CursorWrapperInner(293): Cursor finalized without prior close() 


Line 315 in IOInterface.java is FileOutputStream f = new FileOutputStream(writeable); 
+1

ログインしてください'log.w(" Write sd "、e);'(例外のための 'toString()'はありません)、logcatからスタックトレースをポストします。また、次の構文を使用してFileオブジェクトを作成することもできます: 'File writeable = new File(Environment.getExternalStorageDirectory()、" Survey.txt ");' –

答えて

2

このトピックに関する研究のいくつかのより多くの時間をやった後、私は場所が別の人がこれを行うための別の方法を掲載していたし、発見し、それは次のとおりです。

String fileName = surveyName + ".csv"; 
String headings = "Hello, world!"; 
File path = Environment.getExternalStorageDirectory(); 
File file = new File(path, fileName); 
path.mkdirs(); 
OutputStream os = new FileOutputStream(file); 
os.write(headings.getBytes()); 
1

書き込みしようとしているファイルが実際にはディレクトリであることがあります。ファイル/ディレクトリを見つけて削除します。

私は最初にファイルを扱っていたときにこれに遭遇しました。ディレクトリを作成するだけでFile.mkdirs()を呼び出していましたが、指定したファイル名のディレクトリが作成されました。

私はファイルを作成するときに2つのFileオブジェクトを使用します。最初はパスだけを参照し、mkdirs()を呼び出します。次に、2番目のファイルが参照されます。

//create path 
File directoryFile = new File(Environment.getExternalStorageDirectory(), ""); 
directoryFile.mkdirs(); 

//create file 
File outFile = new File(Environment.getExternalStorageDirectory(), filename); 
関連する問題