2012-03-09 15 views
1

私はすべての関連する質問を見てきましたが、これを動作させることはできません。ここでアンドロイドのSDカードに作成されたフォルダですが、ファイルが作成されていません

コードです:

File sdCard = Environment.getExternalStorageDirectory(); 
File directory= new File (sdCard.getAbsolutePath() + appName);   
directory.mkdirs();  
File file = new File(directory,fileName); 

フォルダが作成されますが、私は、ファイルが存在しないというエラーを取得しています。 appNameは、フォルダの名前を含む文字列であり、正しく動作します。 fileNameは、含めるファイルの名前を含む文字列です。

私はマニフェストに許可を含めました。

私は間違っていますか?

更新:

コードは、コードが名前の文字列ではなく、文字列リテラルを使用しているため、隠されたと同時に、で、サブディレクトリやファイルを作成しようとします。サブディレクトリを作成するための中間ステップを追加することで、この問題が解決されました。

+0

Windowsから作業する場合は、Aleks Gの回答ではなく、2つを追加します。 – Lucia

+0

EclipseはWindows上にありますが、私は自分の携帯電話でデバッグしています。単一の/すべきこと - 右? – rooware

+0

代わりに、このようなものを試してみてください:\t \t ファイルf =新しいファイル(Environment.getExternalStorageDirectory() \t \t \t \t + File.separator + "のappName"); f.createNewFile(); ; 私はFile.separatorが違いをもたらすと思います! – Lucia

答えて

3

を参照してください。あなたのコードでは、実際にSDカードにファイルを作成していません。ファイルを作成する必要がある場合は、次のようにしてください。

​​

これは概念的なものです。実際にはfileNameを別のサブフォルダと実際のファイルに分けて別々に処理するほうがずっと良いでしょう。

+0

回答ありがとうございます。私はコード行を追加しましたが、私はまだこれらの例外を取得します。 03-09 09:56:42.697:W /システム。(31125):java.io.IOException:そのようなファイルまたはディレクトリがありません 03-09 09:56:42.707:W/System.err(31125):\t at java.io.File.createNewFileImpl(ネイティブメソッド) – rooware

+0

@ user1244332 appNameとfilenameの値は何ですか?また、sdCard.getAbsolutePath()は何を返しますか? –

+0

appName = "/ JoesHouse" fileName = "default/text.txt"。 sdCard.getAbsolutePath()は/ mnt/sdcardを返します。 directory.getAbsolutePath()は/ mnt/sdcard/JoesHouseを返します。 – rooware

1

これを試してみてください:この中

を、私は、文字列のテキストファイル(.txtファイル)を作成しています。

public void createFileFromString(String text) 
    {  
     File logFile = new File("sdcard/xmlresponseiphone.txt"); 
     if (!logFile.exists()) 
     { 
      try 
      { 
      logFile.createNewFile(); 
      } 
      catch (IOException e) 
      { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 
     } 
     try 
     { 
      //BufferedWriter for performance, true to set append to file flag 
      BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true)); 
      buf.append(text); 
      buf.newLine(); 
      buf.close(); 
     } 
     catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

テストこの、およびディレクトリが作成されている場合、あなたは正しい軌道に乗っている、あなたが不足しているもの:)

+0

ありがとうございます。私はファイルを作成する過程でディレクトリを作成しようとしていました。私はJava IOに非常に新しいです – rooware

0

このような方法で試してください。この場合、私はイメージを保存しています!ディレクトリを作成するための

File directory = new File(Environment.getExternalStorageDirectory() 
       + File.separator + appName); 
     directory.mkdirs(); 

し、その中に保存するために(ビットマップ、グラフ、コンテキストコンテキスト、文字列名、文字列の時、今ブール)保存 公共ボイドのIOException {

ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    graph.compress(Bitmap.CompressFormat.PNG, 100, bytes); 

    // you can create a new file name "test.jpg" in sdcard folder. 
    String fileName = ""; 
    if (now){ 
     fileName = getDateTime()+"_00"+".png"; 
    } 
    else { 
     fileName = time.replace(".txt", ".png"); 
    } 
    File f = new File(Environment.getExternalStorageDirectory() 
      + File.separator + "appName/" + fileName); 
    f.createNewFile(); // write the bytes in file 
    FileOutputStream fo = new FileOutputStream(f); 
    fo.write(bytes.toByteArray()); 
} 
をスローします

私はこのトリックがFile.separatorにあると思います!

関連する問題