запись текстового файла на sd карту

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
denmusic1992
Сообщения: 8
Зарегистрирован: 06 окт 2013, 20:30

запись текстового файла на sd карту

Сообщение denmusic1992 » 06 окт 2013, 20:37

помогите пожалуйста, что я делаю не так.
надо создать текстовый файл на sd карте если такого не существует, или написать информацию в уже существующий...
вот текст:

Код: Выделить всё

String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
			String fileName = "info.txt";
			File myF = new File(baseDir + fileName);
			Toast.makeText(getApplicationContext(), baseDir, Toast.LENGTH_LONG).show();
			if(!myF.exists())
		    {
		        try
		        {
		        	myF.createNewFile();
		        	try 
		            {
		            	FileOutputStream fOut = openFileOutput(myF.getAbsolutePath(),MODE_WORLD_WRITEABLE);
		            	OutputStreamWriter osw = new OutputStreamWriter(fOut);
		            	osw.write(" Hello ");
		            	osw.flush();
		            	osw.close();
		            }
		            catch (Throwable t) 
		            {
		                Toast.makeText(getApplicationContext(), "Exception: " + t.toString(), Toast.LENGTH_LONG).show();
		            }
		        } catch (FileNotFoundException e) {
		        	e.printStackTrace();
		        	toast = Toast.makeText(getApplicationContext(),"ошибка 11", Toast.LENGTH_SHORT);
		        	toast.show();
		        	Log.d(TAG, "error11");
		        } catch (IOException e) {
		        	e.printStackTrace();
		        	toast = Toast.makeText(getApplicationContext(),"ошибка 12", Toast.LENGTH_SHORT);
		        	Log.d(TAG, "error12");
		        }
		    }
		    else
		    {
		        try {
			        	FileOutputStream fOut = openFileOutput(myF.getAbsolutePath(),MODE_WORLD_WRITEABLE);
		            	OutputStreamWriter osw = new OutputStreamWriter(fOut);
		            	osw.write(" Hello man ");
		            	osw.flush();
		            	toast = Toast.makeText(getApplicationContext(),"Комментарий был скопирован", Toast.LENGTH_SHORT);
		    			toast.show();
		            	osw.close();
		        		toast = Toast.makeText(getApplicationContext(),"Комментарий был добавлен", Toast.LENGTH_LONG);
		        } catch (FileNotFoundException e) {
		        	e.printStackTrace();
					Log.d(TAG, "error21");
					toast = Toast.makeText(getApplicationContext(),"ошибка 21", Toast.LENGTH_SHORT);
		        } catch (IOException e) {
					e.printStackTrace();
					toast = Toast.makeText(getApplicationContext(),"ошибка 22", Toast.LENGTH_SHORT);
					Log.d(TAG, "error22");
				}
		    }
по логам выдается error 12.
вообще как я понял, не удается создать файл, т.е. не выполняется createnewfile
помогите пожалуйста, целый день сижу - не могу выявить проблему :cry:

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: запись текстового файла на sd карту

Сообщение trew » 06 окт 2013, 21:24

Ниже, два фрагмента try-cath, на запись и на добавление в файл. Оформи нормально их.

Код: Выделить всё

 Log.d(TAG, "--- begin --"); 
		   try{
		   FileOutputStream fOut = new FileOutputStream(new File("/sdcard/info9.txt")); 
		   OutputStreamWriter osw = new OutputStreamWriter(fOut); 
           osw.write(" Hello3 "); 
           Log.d(TAG, "--- Hello --"); 
           osw.flush(); 
           osw.close(); 
		   } catch (Exception e) { 
		   }
		   
		   
		   try { 

			   OutputStreamWriter writer = new OutputStreamWriter(
		                  new FileOutputStream("/sdcard/info9.txt", true), "UTF-8");
		            BufferedWriter fbw = new BufferedWriter(writer);
		            fbw.newLine();
		            fbw.write("append txt...");
		            fbw.newLine();
		            fbw.close();
			    }
			   catch(Exception e) {
			    System.out.println(e.toString());
			    }
В файл AndroidManifest.xml добавь строку

Код: Выделить всё

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
Я для себя выработал правило, вначале тестирую маленький фрагмент кода, если работает - усложняю его.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

denmusic1992
Сообщения: 8
Зарегистрирован: 06 окт 2013, 20:30

Re: запись текстового файла на sd карту

Сообщение denmusic1992 » 06 окт 2013, 21:40

Спасибо большое за ответ, сейчас буду переделывать)
"new File("/sdcard/info9.txt")" - так можно явно задавать путь?

а в андроид манифесте я прописал эту строку.

denmusic1992
Сообщения: 8
Зарегистрирован: 06 окт 2013, 20:30

Re: запись текстового файла на sd карту

Сообщение denmusic1992 » 06 окт 2013, 21:42

Кстати, можно ли сначала создать File sdFile = new File("/sdcard/info.txt") и потом проверить существует ли он if(!sdFile.exists())?


все, проверил уже, работает все. Спасибо большое ещё раз ;)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: запись текстового файла на sd карту

Сообщение rezak90 » 06 окт 2013, 23:22

у вас у обоих не будет работать корректно на всех телефонах, так как путь к sd-карте бывает разный.
R.id.team
Политика на форуме запрещена

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: запись текстового файла на sd карту

Сообщение trew » 06 окт 2013, 23:37

rezak90 писал(а):у вас у обоих не будет работать корректно на всех телефонах, так как путь к sd-карте бывает разный.
Подразумевалось под фразой "оформи нормально" что в коде будет так:
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Ответить