2017-04-12 16 views
0

私はAndroid開発用のHTC Desire 610を使用しています。私は同じ質問に対する他の回答の例を踏襲しましたが、私のファイル保存はすべてSDカードではなく内部のデバイスストレージになります。電話は間違いなくSDカードを認識し、電話の中からファイルをSDカードに転送することができます。ファイルはSDカードではなく内部ストレージに保存されます

ファイルパスをSDカードにハードコーディングしてみましたが、コンピュータに接続していない状態でアプリを実行しようとしましたが、すべて役に立たなくなりました。私のアプリがこれらのファイルを直接SDカードに保存できることは非常に重要です。何か案は?

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    writeDataToFile("2394872934729348"); 

} 


public void writeDataToFile(String data){ 
    BufferedWriter bufferedWriter = null; 

    String dataOutFileName = Environment.getExternalStorageDirectory().getAbsolutePath()+"/data.txt"; 

    try{ 
     bufferedWriter = new BufferedWriter(new FileWriter(dataOutFileName,true)); 
     bufferedWriter.write(data); 
     bufferedWriter.flush(); 
    } 
    catch (IOException e){ 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      if(bufferedWriter != null){ 
       bufferedWriter.close(); 
      } 
     } catch (IOException e){ 
      e.printStackTrace(); 
     } 
    } 

    MediaScannerConnection.scanFile(this,new String[]{dataOutFileName}, null,null); 
} 
} 

EDIT: 私は今、これをしようとしています。私はパッケージファイルに直接書き込む場合を除き、私はあなたのAndroidManifest.xmlでアプリの適切な権限を与えることがあります

File dataDir = new File("/storage/ext_sd/Data/"); 
    dataDir.mkdirs(); 
    File outputFile = new File(dataDir,"data.txt"); 

    try{ 
     FileOutputStream fos = new FileOutputStream(outputFile); 
     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fos); 
     outputStreamWriter.write(data); 
     outputStreamWriter.close(); 

    } 
    catch (IOException e){ 
     Log.e("Exception", "File write failed: " + e.toString()); 
    } 
+2

あなたのコードには、[リムーバブルストレージ](https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html)とは何の関係もありません。 Android SDKが[外部ストレージ](https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html)と呼んでいるものに書き込んでいます。 'getExternalFilesDirs()'を使って、アプリケーションが外付けストレージとリムーバブルストレージに書き込める場所を取得します。 – CommonsWare

答えて

1
です

外部ストレージのプライベートストレージディレクトリにアクセスするには、getExternalStorageDirectory()ではなくgetExternalFilesDirs()を使用します。

各位置のエントリを含む配列を返します。アレイ内の最初のエントリはプライマリ外部ストレージと見なされます。完全または使用不可でない限り、その場所を使用する必要があります。詳細については、Android APIガイドのUsing the External Storageを参照してください。

+0

ありがとう、これは働いた!私自身のディレクトリを作ることができないのですか、または私のアプリのパッケージ名ディレクトリに書き込む必要がありますか? – emhomm4

+1

あなたは大歓迎です。もちろん、ディレクトリを作成することもできます。 [this](http://stackoverflow.com/questions/2130932/how-to-create-directory-automatically-on-sd-card)を確認してください。 –

+0

"getExternalFilesDirs()"を呼び出すたびに、SDカード上の私のアプリケーションのパッケージディレクトリ内のファイルのみがリストされます。それは私のパッケージディレクトリに入っていない限り、SDカードにmkdir()をさせません。 – emhomm4

0

(com.mypackageなど)にFileNotFoundExceptionを取得しますか? まだ行っていない場合は、アプリマニフェストに以下の行を追加してSDカードに書き込むための適切なアクセス許可を与える必要があります:

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

たぶんそれが問題

+0

私はそれを持っている、ありがとう。 – emhomm4

関連する問題