0

外部および内部ストレージ内の特定のパスにデータを挿入および取得しようとしています。ネットで例を見つけました。成功しました。

これは保存して取得する私のコードです

public class MainActivity extends Activity implements OnClickListener{

 private String filename = "MySampleFile.txt";
 private String filepath = "MyFileStorage";
 File myInternalFile;
 File myExternalFile;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
  File directory = contextWrapper.getDir(filepath, Context.MODE_PRIVATE);
  myInternalFile = new File(directory , filename);

  Button saveToInternalStorage =
   (Button) findViewById(R.id.saveInternalStorage);
  saveToInternalStorage.setOnClickListener(this);

  Button readFromInternalStorage =
   (Button) findViewById(R.id.getInternalStorage);
  readFromInternalStorage.setOnClickListener(this);

  Button saveToExternalStorage =
   (Button) findViewById(R.id.saveExternalStorage);
  saveToExternalStorage.setOnClickListener(this);
 -
  Button readFromExternalStorage =
   (Button) findViewById(R.id.getExternalStorage);
  readFromExternalStorage.setOnClickListener(this);

  //check if external storage is available and not read only 
  if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) { 
   saveToExternalStorage.setEnabled(false);
  }
  else {
   myExternalFile = new File(getExternalFilesDir(filepath), filename);
  }

 }

 public void onClick(View v) {

  EditText myInputText = (EditText) findViewById(R.id.myInputText);
  TextView responseText = (TextView) findViewById(R.id.responseText);
  String myData = "";

  switch (v.getId()) {
  case R.id.saveInternalStorage:
   try {
    FileOutputStream fos = new FileOutputStream(myInternalFile);
    fos.write(myInputText.getText().toString().getBytes());
    fos.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   myInputText.setText("");
   responseText
   .setText("MySampleFile.txt saved to Internal Storage...");
   break;

  case R.id.getInternalStorage:
   try {
    FileInputStream fis = new FileInputStream(myInternalFile);
   // DataInputStream in = new DataInputStream(fis);
    BufferedReader br =
     new BufferedReader(new InputStreamReader(fis));
    String strLine;
    while ((strLine = br.readLine()) != null) {
     myData = myData + strLine;
    }
    br.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   myInputText.setText(myData);
   responseText
   .setText("MySampleFile.txt data retrieved from Internal Storage...");
   break;

  case R.id.saveExternalStorage:
   try {
    FileOutputStream fos = new FileOutputStream(myExternalFile);
    fos.write(myInputText.getText().toString().getBytes());
    fos.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   myInputText.setText("");
   responseText
   .setText("MySampleFile.txt saved to External Storage...");
   break;

  case R.id.getExternalStorage:
   try {
    FileInputStream fis = new FileInputStream(myExternalFile);
    DataInputStream in = new DataInputStream(fis);
    BufferedReader br =
     new BufferedReader(new InputStreamReader(in));
    String strLine;
    while ((strLine = br.readLine()) != null) {
     myData = myData + strLine;
    }
    in.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   myInputText.setText(myData);
   responseText
   .setText("MySampleFile.txt data retrieved from Internal Storage...");
   break;


  }
 }

次に、パスが作成されたかどうかを理解するために、すべてのSDカードパスを取得したかった..

storage/sdcard/MyFileStorage ..このコードを使用しています

public class MainActivity extends ListActivity {

List<String>fileList=new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        File root=
                new File(Environment.getExternalStorageDirectory().getAbsolutePath());
        listDir(root);
      ArrayAdapter<String>adapter=
              new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,fileList);
   this.setListAdapter(adapter);

    }

    private void listDir(File f) {

        File[]files=f.listFiles();
        for (File file : files) {
            fileList.add(file.getPath());

        }
    }



}

しかし、私はこのパスを以下に表示することを除いて.しかし、それは存在しません.何が間違っていますか

storage/sdcard/MyFileStorage 
4

1 に答える 1

0

myExternalFile = new File(getExternalFilesDir(ファイルパス), ファイル名);

この行は実際にファイルを作成します/storage/sdcard0/Android/data/your.application.name/files/MyFileStorage

についてのドキュメントを読むgetExternalFilesDir

于 2014-05-09T09:38:41.757 に答える