Мне нужен пример, показывающий, как читать и записывать файл, включая путь к внутреннему хранилищу Android - PullRequest
2 голосов
/ 14 февраля 2012

Я устал возиться.И я начинаю верить, что это на самом деле невозможно.Где я могу найти простой пример, показывающий, как написать файл "myPath / myFile.txt"?А потом снова прочитать его?

Это пример блока кода, который я не могу заставить работать:

if(pathExists(path, ctx))  
{  
File file = new File(ctx.getFilesDir().getAbsolutePath() +"/" + path, fileName);  
FileInputStream fIn = new FileInputStream(file);  

InputStreamReader isr = new InputStreamReader(fIn);  

StringWriter writer = new StringWriter();  
IOUtils.copy(fIn, writer, "UTF-8");  
fileStr = writer.toString();  
}

Это ошибка, которую я получаю:
"java.io.IOException: каталог "

Ответы [ 4 ]

3 голосов
/ 15 февраля 2012

В следующем фрагменте будут скопированы файлы, сохраненные в пространстве приложения, по указанному вами пути.

File mfile=new File("/data/data/src.com.file.example/files");
File[] list=mfile.listFiles();
    // The path where you like to save your files
String extStorageDirectory = "/mnt/sdcard/backup/";


    File file23 = null;
    File fr = null;
    for(int i =0;i<list.length;i++){
File myNewFolder = new File(extStorageDirectory +list[i].getName().substring(0,5));

if(myNewFolder.exists()){

   String selectedFilePathq = "data/data/src.com.file.example/file/"+list[i].getName();
file23 = new File(selectedFilePathq);
fr = new File(myNewFolder+"/"+list[i].getName());
}else{
  myNewFolder.mkdir();
String selectedFilePathq = "data/data/src.com.file.example/files  /"+list[i].getName();
file23 = new File(selectedFilePathq);
fr = new File(myNewFolder+"/"+list[i].getName());
}



try {
 copy(file23,fr);
} catch (IOException e) {
    e.printStackTrace();
}
}








public void copy(File src, File dst) throws IOException {
    InputStream in = new FileInputStream(src);
    OutputStream out = new FileOutputStream(dst);

    // Transfer bytes from in to out
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
    in.close();
    out.close();
}
0 голосов
/ 14 февраля 2012
String strfile1 = getApplicationContext().getFilesDir().getAbsolutePath() + "/serstatus.txt" ;

File f1 = new File(strfile1);
0 голосов
/ 14 февраля 2012

вы должны использовать методы сериализации, как в Java. чтобы сохранить текст как файл, вы должны использовать FileOutputStream, а для чтения файла вы должны использовать FileInputStream. Вы можете проверить следующий код: он имеет простой текст редактирования и две кнопки: одну для сохранения и одну для чтения данных, сохраненных в этом файле.

Следующий код предназначен для сохранения текста в файле с именем raksi.

Button savebutton = (Button)findViewById(R.id.but);
savebutton.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
        e= (EditText)findViewById(R.id.edit);
        StringBuffer sb = new StringBuffer();
        sb.append(e.getText().toString());
        String s = sb.toString();
        try { 
            final String TESTSTRING = new String(s);
            FileOutputStream fOut = openFileOutput("raksi.txt",MODE_WORLD_READABLE);
            OutputStreamWriter osw = new OutputStreamWriter(fOut);
            osw.write(TESTSTRING);
            ll = TESTSTRING.length();
            osw.flush();
            osw.close();
        }catch (Exception e) {
        // TODO: handle exception
        }
    }
});

Следующий код - прослушиватель щелчков для кнопки get. он читает данные из файла и отображает их как тост,

Button b1 = (Button)findViewById(R.id.but1);
b1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    try{
        FileInputStream fIn = openFileInput("name.txt");
        InputStreamReader isr = new InputStreamReader(fIn);
        char[] inputBuffer = new char[ll];
        isr.read(inputBuffer);
        String readString = new String(inputBuffer);
        Toast.makeText(getApplicationContext(), readString, Toast.LENGTH_LONG).show();
    }
    catch(IOException e){
    // TODO: handle exception
    }
0 голосов
/ 14 февраля 2012

Вы не можете записывать во внутреннее хранилище Android (кроме случаев, когда ваше устройство имеет root-права), за исключением частного файлового пространства, назначенного вашему собственному приложению системой Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...