2013-06-07 2 views
4

С помощью следующего кода, я пытаюсь написать на мой SDCard:Android: Написать текст в TXT

public void writedata(String data) { 
      //BufferedWriter out = null; 

      System.out.println(data); 
      try{ 

       FileOutputStream out = new FileOutputStream(new File("/sdcard/tsxt.txt")); 
       out.write(data.getBytes()); 
       out.close(); 

       } catch (Exception e) { //fehlende Permission oder sd an pc gemountet} 
        System.out.println("CCCCCCCCCCCCCCCCCCCCCCCALSKDJLAK"); 
       } 

      } 

Разрешение в манифесте:

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

Но теперь, когда я открываю файл , там ничего нет. Где проблема? Я уверен, что data имеет некоторое значение.

EDIT:

Я получаю это сообщение в LogCat:

02-06 01:59:51.676: W/System.err(1197): java.io.FileNotFoundException: /storage/sdcard0/sdcard/tsxt.txt: open failed: ENOENT (No such file or directory) 

Я пытался создать файл на SDCard, но по-прежнему та же ошибка. Есть ли код, который создается Файлом, если он не существует?

+0

У вас есть это в вашем манифесте? mari

+1

БуферныйWriter будет более подходящим для написания текста. (http://www.mkyong.com/java/how-to-write-to-file-in-java-bufferedwriter-example/) –

+0

Также решение с BufferedWriter не работает! – user896692

ответ

5

Попробуйте с этим кодом:

File sdCard = Environment.getExternalStorageDirectory(); 
File dir = new File (sdCard.getAbsolutePath() + "/dir"); 

File file = new File(dir, "tsxt.txt"); 

FileOutputStream f = new FileOutputStream(file); 

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

File dir = new File (sdCard.getAbsolutePath() + "/"); 
+1

Я получаю это сообщение в LogCat: 02-06 01: 59: 51.676: W/System.err (1197): java.io.FileNotFoundException: /storage/sdcard0/sdcard/tsxt.txt: open failed: ENOENT (нет такой файл или каталог) – user896692

2

Попробуйте это:

BufferedWriter out;   
try { 

FileWriter fileWriter= new FileWriter(Environment.getExternalStorageDirectory().getPath()+"/tsxt.txt") 

out = new BufferedWriter(fileWriter); 

out.write("Your text to write"); 

out.close(); 

}catch (FileNotFoundException e) { 
e.printStackTrace(); 
}catch (IOException e) { 
e.printStackTrace(); 
} 
+0

К сожалению, все еще существует та же проблема. Файл пуст (я его создал раньше) – user896692

+0

все еще получает java.io.FileNotFoundException? – IronBlossom

+0

Просто интересно, подключили ли вы устройство к вашему устройству или подключили его к компьютеру в режиме массового хранения? – IronBlossom

0

Попробуйте

FileOutputStream fOut =openFileOutput(Environment.getExternalStorageDirectory().getPath()+"/tsxt.txt",MODE_WORLD_READABLE); 
OutputStreamWriter osw = new OutputStreamWriter(fOut); 
//---write the string to the file--- 
osw.write(str); 
osw.flush(); 
osw.close(); 
0

Перед написанием любой файл на сд карту вам нужно проверить, что SDCard установлен или нет, если нет, тогда просто установите его, а затем напишите файл на нем с помощью внешнего пути хранения.

вы можете использовать следующий код, чтобы проверить, SDCard смонтировать или не

static public boolean hasStorage(boolean requireWriteAccess) { 
    //TODO: After fix the bug, add "if (VERBOSE)" before logging errors. 
    String state = Environment.getExternalStorageState(); 
    Log.v(TAG, "storage state is " + state); 

    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     if (requireWriteAccess) { 
      boolean writable = checkFsWritable(); 
      Log.v(TAG, "storage writable is " + writable); 
      return writable; 
     } else { 
      return true; 
     } 
    } else if (!requireWriteAccess && Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
     return true; 
    } 
    return false; 
} 

if(hasStorage(true)){ 

//call here your writedata() function 



} 
1
try{ 
    File myFile = new File("/sdcard/tsxt.txt"); 
    myFile.createNewFile(); 
    FileOutputStream fOut = new FileOutputStream(myFile); 
    OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); 
    myOutWriter.append("your data here"); 
    myOutWriter.close(); 
    fOut.close(); 
}catch(Exception e){} 
0

Этот код работает отлично ..

public File getAlbumStorageDir(String albumName) { 
     // Get the directory for the user's public pictures directory. 
     File file = new File(Environment.getExternalStorageDirectory() + "/files", albumName); 
     Log.d("File", "Bug file Created" + file.getAbsolutePath()); 
     return file; 
    }` 

Чтобы написать текстовый файл внутри карты памяти SD (для хранения//sdcard0/files/bugReport.txt)

try{ 
      outputStream = new FileOutputStream(this.getAlbumStorageDir(bugReport.txt)); 
      outputStream.write(report.toString().getBytes()); 
      Log.d("File","Report Generated"); 
      outputStream.close(); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
Смежные вопросы