Скопировать файл из системного хранилища (/ data / data…) во внешнее хранилище

1

Я хочу скопировать файл из /data/data... во внешний SDCARD! Тем не менее, я нахожу эту проблему: Сообщение журнала: 04-04 12: 01:19.271: DEBUG/Carburant (9623):/username.usercar.settings.dat(Нет такого файла или каталога)

Я предполагаю, что я не могу просто получить доступ к этому файлу без "лишнего" кода. Вот мой код (необходимые строки):

File sdCard = Environment.getExternalStorageDirectory();
    File dir = new File (sdCard.getAbsolutePath() + "/Carburant/");
    dir.mkdirs();
    copyfile(nom,sdCard.getAbsolutePath() + "/Carburant/storeddata.dat");

public Import(Context context,String nom) {
        this.context = context;
        this.nom=nom;
       }

Строки, в которых вызывается функция:

case R.id.exporter:
            final SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(context);
    String fileName = getResources().getString(R.string.fileName);
    fileDir = "" + preferences.getString("login", "") + "."+ preferences.getString("marque", "") + ".";
    Import myImport = new Import(this,fileDir+fileName);
            myImport.transfer();
            return true;

Android Manifest (необходимый код):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="carburant.android.com"
      android:versionCode="1" android:versionName="0.1">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-sdk android:minSdkVersion="8" />

Скопировать файл func:

private void copyfile(String srFile, String dtFile){
        try{
            File f1 = new File(srFile);
            File f2 = new File(dtFile);
          InputStream in = new FileInputStream(f1);
          OutputStream out = new FileOutputStream(f2);

          byte[] buf = new byte[4096];
          int len;
          while ((len = in.read(buf)) > 0){
            out.write(buf, 0, len);
          }
          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();      
        }
      }

Итак, что не хватает? Спасибо.

  • 0
    Я думаю, что проблема пути к файлу, который вы хотите скопировать. Можете ли вы показать нам, как вы получили nom ?
  • 0
    @MByD: пожалуйста, смотрите мой отредактированный пост.
Показать ещё 4 комментария
Теги:
file-io

1 ответ

3
Лучший ответ

Чтобы получить файл, расположенный в директории "files" (при условии, что его имя - settings.dat), используйте следующий метод:

String filePath = this.getFilesDir().getAbsolutePath() + File.separator + "settings.dat";
Import myImport = new Import(this,filePath);

Если файл является сырым ресурсом, следуйте ответ на этот вопрос, чтобы скопировать его.

(убедитесь, что у вас есть разрешение на запись во внешнее хранилище...)

  • 0
    @MByD: у меня проблема с "yourActivity"! моя текущая активность с вызовом объекта Import - "Сохранения". Когда я помещаю String mainDirPath = Save.getFilesDir (). GetParent (); у меня ошибка.
  • 0
    @MByD: это сообщение об ошибке: не может сделать статическую ссылку на нестатический метод getFilesDir () из типа ContextWrapper
Показать ещё 17 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню