2011-04-23 9 views
29

próbuję zapisać plik txt w moim folderze, w pamięci wewnętrznej, ale twarz tego samego problemu za każdym razem:Zapisz plik wewnętrzny w moim folderze wewnętrznej w Androidzie

„Źródło Not Found”

Piszę mój kod na różne sposoby wyrażone tutaj w następujący sposób, ale pod każdym względem mam ten sam problem.

Warto powiedzieć, że nawet dodać

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

w manifest.xml że nie jest to konieczne dla pamięci wewnętrznej.

To trzeba powiedzieć, że nie ma żadnego problemu, aby zapisać pliki w /data/data/pakietów/plików drogi, ale kiedy dodać mój folder korzenia pliki na przykład /data/data/package/files/myforlder/myfile.txt Mam do czynienia z problemem "Source Not Found".

Czy możesz wskazać mi właściwy kierunek, aby rozwiązać ten problem?

Drugie pytanie dotyczy zapisu pliku w zewnętrznym folderze w pamięci zewnętrznej.
(na przykład: pamięć sdCard lub nośnik USB) to inny scenariusz lub to samo?

Pierwszy sposób:

OutputStreamWriter out; 
try { 
    File path=new File(getFilesDir(),"myfolder"); 
    File mypath=new File(path,"myfile.txt"); 
    if (!mypath.exists()) { 
     out = new OutputStreamWriter(openFileOutput(mypath.getAbsolutePath() , MODE_PRIVATE)); 
     out.write("test"); 
     out.close(); 
    }       
} 

Drugi sposób:

OutputStreamWriter out; 
try { 
    ContextWrapper cw = new ContextWrapper(this); 
    File path = cw.getDir("myfolder", Context.MODE_PRIVATE); 
    if (!path.exists()) { 
     path.createNewFile(); 
     path.mkdir(); 
    } 
    File mypath=new File(path,"myfile.txt"); 
    if (!mypath.exists()) { 
     out = new OutputStreamWriter(openFileOutput(mypath.getAbsolutePath() , MODE_PRIVATE)); 
     out.write("test"); 
     out.close(); 
    } 
} 

Trzeci sposób:

File path=getFilesDir(); 
String mypath=path.toString() + "/myfolder"; 
OutputStreamWriter out; 
try { 
    File f = new File(mypath , "/myfile.txt" ); 
out = new OutputStreamWriter(openFileOutput(f.getPath(), MODE_PRIVATE)); 
    out.write("test"); 
    out.close();     
    } 

Fourth Way:

File path=getFilesDir(); 

OutputStreamWriter out; 
    try { 
    File f = new File(path.getPath() + "/myfolder/myfile.txt" ); 
    out = new OutputStreamWriter(openFileOutput(f.getPath(), MODE_PRIVATE)); 
    out.write("test"); 
    out.close();      
    } 

Piąty sposób:

File path=getFilesDir();     
OutputStreamWriter out; 
try { 
    File f = new File(path.getCanonicalPath() + "/myfile.txt"); 
    out = new OutputStreamWriter(openFileOutput(f.getPath(), MODE_PRIVATE)); 
    out.write("test"); 
    out.close();      
    } 
+1

Podczas pisania pytania wybierz kod i naciśnij Ctrl + K, to autoindent i kolorowanie kodu , dzięki czemu jest znacznie bardziej czytelny. Nikt nie będzie chciał odczytać tego kodu w sposób niewidoczny i bezbarwny. –

Odpowiedz

55

Pierwszy sposób:

Nie utworzyć katalogu. Ponadto podajesz bezwzględną ścieżkę do openFileOutput(), która jest nieprawidłowa.

Drugi sposób:

Stworzyliście pusty plik o pożądanej nazwy, które następnie zapobiega cię od tworzenia katalogu. Ponadto podajesz bezwzględną ścieżkę do openFileOutput(), która jest nieprawidłowa.

Trzeci sposób:

Nie utworzyć katalogu. Ponadto podajesz bezwzględną ścieżkę do openFileOutput(), która jest nieprawidłowa.

Fourth Way:

Nie utworzyć katalogu. Ponadto podajesz bezwzględną ścieżkę do openFileOutput(), która jest nieprawidłowa.

Piąty sposób:

Nie utworzyć katalogu. Ponadto podajesz bezwzględną ścieżkę do openFileOutput(), która jest nieprawidłowa.

Prawidłowy sposób:

  1. Tworzenie File do żądanego katalogu (np File path=new File(getFilesDir(),"myfolder");)
  2. połączeń mkdirs() tego File utworzenia katalogu jeśli nie istnieje
  3. Tworzenie File dla plik wyjściowy (np. File mypath=new File(path,"myfile.txt");)
  4. Użyj standard Java I/O, aby napisać do tego File (np. używając new BufferedWriter(new FileWriter(mypath)))
+0

to plik i folder utworzony w pamięci wewnętrznej lub sdcard? – Shoshi

+0

@Shoshi: 'getFilesDir()' reprezentuje pamięć wewnętrzną. – CommonsWare

+0

dziękować. @CommonsWare – Shoshi

10

Save:

public boolean saveFile(Context context, String mytext){ 
    Log.i("TESTE", "SAVE"); 
    try { 
     FileOutputStream fos = context.openFileOutput("file_name"+".txt",Context.MODE_PRIVATE); 
     Writer out = new OutputStreamWriter(fos); 
     out.write(mytext); 
     out.close(); 
     return true; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

Load:

public String load(Context context){ 
    Log.i("TESTE", "FILE"); 
    try { 
     FileInputStream fis = context.openFileInput("file_name"+".txt"); 
     BufferedReader r = new BufferedReader(new InputStreamReader(fis)); 
     String line= r.readLine(); 
     r.close(); 
     return line; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Log.i("TESTE", "FILE - false"); 
     return null; 
    } 
} 
1

Odpowiedź Mintir4 jest w porządku, chciałbym od obciążenia należy wykonać następujące czynności (w celu odczytania wszystkich wierszy)

FileInputStream fis = myContext.openFileInput(fn); 
BufferedReader r = new BufferedReader(new InputStreamReader(fis)); 
String s = ""; 
while ((s = r.readLine()) != null) { 
    txt += s; 
} 
r.close(); 
+1

edytuj odpowiedź i sformatuj kod, aby był czytelny – kleopatra

Powiązane problemy