【问题标题】:Copy file from system storage(/data/data...) to external storage将文件从系统存储(/data/data...)复制到外部存储
【发布时间】:2011-04-05 00:48:31
【问题描述】:

我想将文件从 /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" />

复制文件功能:

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();      
        }
      }

那么,错过了什么? 谢谢。

【问题讨论】:

  • 我认为问题在于您要复制的文件的路径。你能告诉我们你是怎么得到nom的吗?
  • @MByD:请看我编辑的帖子。
  • @MByD:正如您在日志消息中看到的,它只显示最后一个文件(不是所有路径),我想这就是编译器没有“找到”它的原因:\。跨度>
  • 文件实际位于何处?你能显示一个完整的路径吗?
  • @MByD:(应用程序存储数据的)文件存储在/data/data/carburant.android.com/files/

标签: android file-io


【解决方案1】:

要获取位于“files”目录中的文件(假设其名称为 settings.dat),请使用以下方法:

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

如果文件本身是原始资源,请按照the answer to this question复制它。

(确保您有权写入外部存储...)

【讨论】:

  • @MByD:“你的活动”有问题!我当前调用导入对象的活动是“保存”。当我把 String mainDirPath = Save.getFilesDir().getParent();我有错误。
  • @MByD:这是错误消息:无法从 ContextWrapper 类型对非静态方法 getFilesDir() 进行静态引用
  • 你应该调用方法this.getFilesDir().getAbsolutePath(); 而不是Save.getFilesDir().getAbsolutePath(); ,因为这是一个应该在对象而不是类上调用的方法。
  • @androniennn - 查看这篇文章:stackoverflow.com/questions/4506612/…
  • 没有。你应该通过这样的东西来导入:this.getFilesDir() + File.separator + "settings.dat"
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 2011-12-26
  • 2019-04-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多