android: zapis danych +późniejsze je wydobywanie

0

Hej,
mam pewien problem, mianowicie pisze aplikacje gdzie user podaje pewne dane. Chce je zapisywać do pliku/bazy - obojętnie (co prawda do pliku ciągle zapis mi nie działa). I później, po podłączeniu się do WiFi chciałbym mieć możliwość przesłania tych danych do mojego serwisu/na maila/gdziekolwiek. I teraz pojawia się pytanie: jak mogę to zrobic?
Chciałem zapisywać do pliku no ale się nie udaje, poniżej kod.
Teraz się zastanawiam czy nie użyć bazy danych do tego :/

try{
    		File f = new File("test.txt");
    		if(f.exists())
    		{
    			StringBuilder text = new StringBuilder();
    			BufferedReader br = new BufferedReader(new FileReader(f));
    			String line;
    			while((line=br.readLine())!=null)
    			{
    				text.append(line);
    				text.append("\n");
    			}
    			
    		}
    		else
    		{
    			f.createNewFile();
    			FileOutputStream fOut = new FileOutputStream(f);
    	    	OutputStreamWriter osw = new OutputStreamWriter(fOut);
    	    	osw.write("heelo");
    	    	osw.flush();
    	    	osw.close();
    	    	Toast.makeText(this, "succed", Toast.LENGTH_SHORT).show();
    		}
    		
    		
    	}catch(Exception e){}

dodanie znacznika <code class="java"> - furious programming

0

Zrobiłem tak:

Context context = getApplicationContext();
    	try{
    		
    		File f  = new File(context.getFilesDir(), "test");
    		if(f!=null){...}
                else{
    		  
    		   f.createNewFile();
    			Toast.makeText(this, "created file" ,Toast.LENGTH_SHORT).show();
    		}
    		

i wywala mi aplikacje. dostaje FileNotFoundException

Próbowałem też ustawić "test.txt" i to samo.

Daje cały kod ten funkcji:


private void Saving() 
    {
    	Context context = getApplicationContext();
    	try{
    		
    		File f  = new File(context.getFilesDir(), "test.txt");
    		if(f!=null)
    		{
    		//	InputStream in = new FileInputStream("test.txt"); //openFileInput(context.getFilesDir(),"test");
    			FileInputStream in = openFileInput("test.txt");
    			InputStreamReader tmp = new InputStreamReader(in);
    			BufferedReader reader = new BufferedReader(tmp);
    			String str;
    			StringBuilder buf = new StringBuilder();
    			while((str = reader.readLine()) != null)
    			{
    				buf.append(str+"\n");
    			}
    			in.close();
    			Toast.makeText(this, "OK" ,Toast.LENGTH_SHORT).show();
    		}
    		else
    		{
    		  
    		   f.createNewFile();
    			Toast.makeText(this, "created file" ,Toast.LENGTH_SHORT).show();
    		}
    		
    		
    	}catch(java.io.FileNotFoundException e){
    		Toast.makeText(this, "NO FILE" ,Toast.LENGTH_SHORT).show();
    	}
    	catch(Throwable t)
    	{
    		Toast.makeText(this, "Other except." ,Toast.LENGTH_SHORT).show();
    	}
}
0

LOL jeśli plik nie istnieje to jest oczywiste, że użycie InputStreamReader musi wywołać ten wyjątek (FileNotFoundException).
Najpierw coś musi ten plik utworzyć.

Chyba rozumiesz, ze operator new w java nie może ci zwrócić null-a. Może najwyżej rzucić wyjątek.
Poza tym to chyba oczywiste, ze to jest bezsensu:

if(f!=null) {
        ...
    } else {
        f.createNewFile();

Musisz, zrozumieć, że File reprezentuje plik, który wcale nie musi istnieć (można go potem utworzyć).

0

No to jak mam to zrobić?

  1. Czy plik o nazwie XXX istnieje?
    1a.Istnieje to go weź i do punktu 2.
    1b.Nie istnieje to go stwórz i do punktu 2.
    2a. jeśli wcześniej istaniał to dopisz nowe dane...
    2b. jeśli jest nowy to dopisz nagłówek i dodaj dane...

nie umiem zrobić tego sprawdzenia czy istnieje :/

korzystałem do sprawdzania czy plik istnieje z takiego kodu:

File file = new File(filePath);
if(file.exists())      
//Do somehting
else
// Do something else.
0

I mam jeszcze jedno ważne dla mnie pytanie.
Jak teraz tworze ten plik, kończę działanie aplikacji, to wygląda na to że kompilator/emulator mi usuwa ten plik.
Jak to będzie wyglądać na prawdziwym urządzeniu?

0
File fi = new File("test.txt");
    	if(fi.exists() || fi == null)
    	{
    		Toast.makeText(this, "EXISTS!" ,Toast.LENGTH_SHORT).show();
    	}
    	else
    	{
    		try
    		{    		
    		fi.createNewFile();
    		Toast.makeText(this, "created!" ,Toast.LENGTH_SHORT).show();
    		}
    		catch(IOException e)
    		{
    			Toast.makeText(this, "no file, failed to create" ,Toast.LENGTH_SHORT).show();
    		}
    	}

to jak to powinno być zrobione poprawnie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1