0

次の方法を使用して、1つのAndroidアプリケーションでデータをファイルに書き込みました

 private void writeFileToInternalStorage() {

    String eol = System.getProperty("line.separator");
    BufferedWriter writer = null;

 try{
    writer = new BufferedWriter(new OutputStreamWriter(openFileOutput("myFile.txt", MODE_WORLD_WRITEABLE|MODE_WORLD_READABLE)));
      writer.write("Hello world!");
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    } 
    finally 
    {
      if (writer != null) 
      {
        try 
        {
            writer.close();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
      }
    }
}

次に、このメソッドを使用して別のAndroidアプリケーションからそのファイルを読み込もうとしました

 private void readFileFromInternalStorage(){
    String eol = System.getProperty("line.separator");
    BufferedReader input = null;
    try 
    {
        input = new BufferedReader(new InputStreamReader(openFileInput("myFile1.txt")));
         String line;
        StringBuffer buffer = new StringBuffer();
        while ((line = input.readLine()) != null) 
        {
            buffer.append(line + eol);


        }

       TextView tv = (TextView) findViewById(R.id.textView);  
        tv.setText(buffer.toString().trim());

    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    } 
    finally 
    {
        if (input != null) 
        {
            try 
            {
                input.close();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
    }
}

2 番目の方法では、ファイルを読み取ることができません。読み書き権限も追加しましたが、空白の画面しか表示されません。何がエラーで、どうすればそれを修正できますか??. 私は Android プログラミングが初めてで、あなたの助けが必要です。

ありがとう!

4

2 に答える 2

1

問題は

openFileOutput("myFile.txt", MODE_WORLD_WRITEABLE|MODE_WORLD_READABLE))

ドキュメントには次のように記載されています。

このファイルは、アプリ内の相対パスに書き込まれます。

そのため、アプリケーション 1 に相対するパスにファイルを書き込み、アプリケーション 2 に相対するパスからファイルを読み取ろうとしている場合があります。

Environment.getExternalStorageDirectory() を呼び出して SD カードへのルート パスを取得し、それを使用して FileOutputStream を作成できるはずです。そこから、標準の java.io ルーチンを使用するだけです。

以下のスニペットを見て、ファイルを SD カードに書き込みます。

private void writeToSDCard() {


try
        {
            File file = new File(Environment.getExternalStorageDirectory(),
                    "filename");
            BufferedWriter writer = new BufferedWriter(new FileWriter(file));
            writer.write("Hello World");
            writer.close();
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

以下のスニペットを見て、SD カードに保存されたファイルを読み取ります。

private void readFileFromSDCard() {
    File directory = Environment.getExternalStorageDirectory();
    // Assumes that a file article.rss is available on the SD card
    File file = new File(directory + "/article.rss");
    if (!file.exists()) {
        throw new RuntimeException("File not found");
    }
    Log.e("Testing", "Starting to read");
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader(file));
        StringBuilder builder = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            builder.append(line);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
于 2012-06-08T09:35:18.020 に答える
0

あなたの最善の策は、それをscdcardに次のように配置することです/sdcard/Android/data/package/shared/

于 2012-06-08T09:31:49.250 に答える