2017-06-03 18 views
0

私の電話機(および今後ユーザーの電話機)の内部デバイスストレージにファイルを書き込もうとしています。私は2016年のビデオチュートリアル(https://www.youtube.com/watch?v=EhBBWVydcH8)を見ていて、どのように出力をファイルに簡単に書き込むかを示しています。彼のコードを見たい場合は、8:23に進みます。Androidスタジオ - 読み取り専用ファイルシステム?

とにかく、私は基本的に彼のコードを試してみましたが、それはうまくいきませんでしたので、私は周りを検索すると考えました。

どうやら、ファイルを作成するために、私はこれらのコードの行が必要です。

java.io.IOException: Read-only file system 
    at java.io.UnixFileSystem.createFileExclusivel 
    at java.io.UnixFileSystem.createFileExclusivel 
    at java.io.File.createNewFile(File.java:948) 
    etc...... 

そして:2行目に

String filename = "textfile.txt"; 
File file = new File(filename); 

file.mkdirs(); 
file.createNewFile(); 

を、file.createNewFileは()、私は以下のエラーが出ますチュートリアルのコード行を使用するだけでコードを実行すると、Nullポインタが取得されます。

コード:

  try { 
      FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE); 
      fos.write(IDNum.getBytes()); 
      fos.close(); 
      System.out.println("Wrote STuff Outputtt?"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

エラー:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on a null object reference 
    at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:199) 
    at com.lecconnect.lockoutdemo.FileManager.AddUser(FileManager.java:37) 

ライン37は、のtry/catchの最初の行です。

私に役立つ追加情報が必要な場合はお知らせください。あなたの返信は非常に高く評価されています。

+0

あなた 'FileManager'クラスは明らかにあなたがnew''でインスタンス化すべきではないクラスを拡張します。 'Activity'や' Service'のようなものです。 'openFileOutput()'が解決するように、これを行ったと仮定します。トレースで確認できるように、最終的に呼び出される「コンテキスト」がnullになるため、これを行うことはできません。そのメソッドを別のクラスに保持したい場合は、 'AddUser()'に 'Context'パラメータを追加し、' Activity'、 'Service'などから渡します。' openFileOutput() 'あなたのアプリのプライベートな内部ストレージにファイルを開きます。あなたの期待するものではないかもしれません。 –

+0

@MikeM。私は、あなたが "openFileOutput()"を解決してそこにあったと仮定して、 "... extends Activity"を削除しました。今私は他の活動を通して文脈を伝えています。エラーの原因となった行は、 "FileOutputStream fos = context.openFileOutput(filename、Context.MODE_PRIVATE);"と書き換えられます。私のコードはクラッシュしないようですが、どこにでも自分のテキストファイルが見つかりません。私はInternal_Storage/Android/Data/com.outputproject/demoに行きました。そこにはファイルがあるはずです。そこにはありません。これはあなたが社内の私的な記憶を意味するのでしょうか?またはプライベートファイルが見えないのですか?この場所は大丈夫です。 – FoxDonut

+0

追加モードを使用すると何も変わりません。すべてがうまく動作しますが、.txtドキュメントの場所が見つからないようです。あるいは、私は文脈を誤用したでしょうか? – FoxDonut

答えて

1

ディレクトリとファイル自体を分離することが重要です。 あなたのコードで、あなたが書きたいファイルに対してmkdirsを呼び出すと、mkdirsはあなたのファイルをディレクトリにするため、エラーとなります。ディレクトリのmkdirsを呼び出すと、そのディレクトリが存在しない場合に作成され、このファイルの新しいFileOutputStreamオブジェクトを作成すると自動的にファイルが作成されます。

することは、この方法を試してください。

File directory = getFilesDir(); //or getExternalFilesDir(null); for external storage 
File file = new File(directory, fileName); 

FileOutputStream fos = null; 
try { 
    fos = new FileOutputStream(file); 
    fos.write(IDNum.getBytes()); 
    fos.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

これは外部ストレージに書き込まれませんか?私は内部に書きたい。 – FoxDonut

+0

編集した回答を確認してください。 –

関連する問題