#android #file-io
#Android #ввод-вывод файла
Вопрос:
Я экспортирую файл на SD-карту, однако я сталкиваюсь с исключением FileNotFound ( 04-12 01:26:18.494: DEBUG/Carburant(4568): /mnt/sdcard/Carburant/alaa.peugeot.settings.dat/alaa.peugeot.settings.dat (Is a directory)
) вот код:
try {
File sdCard = Environment.getExternalStorageDirectory();
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write the media
Log.d("Carburant", "Sdcard can read/write !!");
mExternalStorageAvailable = mExternalStorageWriteable = true;
try {
final SharedPreferences preferences = PreferenceManager
.getDefaultSharedPreferences(context);
String fileName = context.getResources().getString(
R.string.fileName);
String fileDir = "" preferences.getString("login", "")
"." preferences.getString("marque", "") ".";
File f2 = new File(context.getFilesDir(), fileDir
fileName);
String y = f2.getAbsolutePath();
Log.d("HI Export", y);
InputStream in = new FileInputStream(f2);
File dir = new File(sdCard.getAbsolutePath()
"/Carburant/");
String x = dir.getAbsolutePath();
Log.d("HI", x);
File file = new File(dir, fileDir fileName);
file.mkdirs();
OutputStream out = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
// out.flush();
in.close();
out.close();
Toast.makeText(context, "Export effectué",
Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException ex) {
Toast.makeText(context, "File Not found",
Toast.LENGTH_SHORT).show();
String x = ex.getMessage();
Log.d("Carburant", x);
} catch (IOException e) {
Toast.makeText(context, "Echec", Toast.LENGTH_SHORT).show();
}
}
// copyfile(nom,file.getAbsolutePath());
else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// We can only read the media
Log.d("Carburant", "Sdcard only read !!");
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
// Something else is wrong. It may be one of many other states,
// but all we need
// to know is we can neither read nor write
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
} catch (Exception e) {
Log.d("CARBURANT", e.getMessage());
}
Хотите экспортировать файл из /data/data/<package name>/fileDir fileName
в каталог, сохраняемый на sdcard.
Комментарии:
1. Ваша конкатенация путей выглядит подозрительно. Я предлагаю подключить несколько волшебных строк и посмотреть, устраняет ли это проблему. При объединении имен файлов и каталогов я предлагаю обрезать все символы косой черты в начале и конце второго и первого сегментов соответственно и повторно вставить косую черту между ними. Очевидно, что это не будет обрабатывать «..», «~» или «.», что вы также можете рассмотреть.
2. @Computer Linguist: Нет, с «.» проблем нет, потому что я использовал этот файл в других классах / действиях, и никаких проблем не возникло. В пути создания абсолютно ошибка. :
3. Я не думаю, что сообщение могло быть более четким :
/mnt/sdcard/Carburant/alaa.peugeot.settings.dat/alaa.peugeot.settings.dat (Is a directory)
. ИзменитеFile file = new File(dir, fileDir fileName); file.mkdirs();
наFile file = new File(dir, fileDir); file.mkdirs(); file = new File(file, fileName);
. При этом ваш код в беспорядке — используйте finally и не используйте 1000 переменных4. @Shog9: вам следует повторно открыть, вообще не слишком локализовано
Ответ №1:
File file = new File(dir, fileDir fileName);
file.mkdirs();
Я думаю, что вы по ошибке создали каталог с именем /mnt/sdcard/Carburant/alaa.peugeot.settings.dat/alaa.peugeot.settings.dat
, и теперь код не может перезаписать его?
Комментарии:
1. Я удалил fileName fileDir в этой строке : File dir = новый файл (sdCard.getAbsolutePath() «/Carburant/»); (см. 1-й пост) и всегда одна и та же проблема: ( .
2. @@Preet Sangha: сделал это:File file = новый файл(sdCard.getAbsolutePath(), fileDir fileName); file.mkdirs(); та же проблема!