(文件导出)这是一个正确的代码吗?[需要帮助]

时间:2011-04-02 23:09:35

标签: android file

(我开始在Android开发中) 我想将文件从/ data / data ....导出到SDCARD中的目录,这是我的代码:

public class Import extends Activity {
    private Context context;

    public void transfer(){ 
        context = getApplicationContext();
    File sdCard = Environment.getExternalStorageDirectory();
    File dir = new File (sdCard.getAbsolutePath() + "/SDCARD/Carburant");
    dir.mkdirs();
    copyfile(context,"/data/data/carburant.android.com/files/","/SDCARD/Carburant/storeddata.dat");

}

    private void copyfile(Context context,String srFile, String dtFile){
        context = getApplicationContext();
        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[1024];
          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();
        }
        catch(IOException e){
            Toast.makeText(context, "Echec", Toast.LENGTH_SHORT).show();      
        }
      }

    }

编辑:第一次尝试:

case R.id.importer:
            String name;
            String mark;
            Import myImport = new Import(this,name,mark);
            Import myImport(this, name, mark);
            myImport.transfer();
            return true;

我在这一行有错误:Import myImport(this, name, mark);

Import cannot be resolved to a variable
The method myImport(Saves, String, String) is undefined for the type Saves

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为问题在于:

File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/SDCARD/Carburant");
dir.mkdirs();
copyfile(context,"/data/data/carburant.android.com/files/",
    "/SDCARD/Carburant/storeddata.dat");

您可以使用"/SDCARD/Carburant/"前面的SD卡的绝对路径创建目录,但是当您调用copyfile()例程时,您忘记了SD卡的绝对路径。

试试这个:

copyfile(context,"/data/data/carburant.android.com/files/",
    sdCard.getAbsolutePath() + "/SDCARD/Carburant/storeddata.dat");

答案 1 :(得分:1)

按如下所示更改Import类(删除extends activity)...

public class Import {
    private Context context;
    private String name;
    private String mark;

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

    // Your other methods here
}

在用于创建Import类实例的Activity中,使用...

Import myImport = new Import(this);

samold建议使用......

copyfile(context,"/data/data/carburant.android.com/files/",
    sdCard.getAbsolutePath() + "/SDCARD/Carburant/storeddata.dat");

...虽然我担心你的源路径,但可能会工作正常......

"/data/data/carburant.android.com/files/"

......上述两点没有意义。首先,您没有指定源文件名(仅限目录路径)。其次,app数据存储在如下路径中......

/data/data/<package name>

...包名应该类似于com.mycompany.myApp - 你反过来(即myApp.mycompany.com),所以除非carburant.android.com真的是你的包的名字这个不是因为该目录不存在而无法工作。

编辑:当用户输入他们的名字和汽车标记时,只需将它们保存为字符串,例如,

String name;
String mark;

然后构建文件路径为...

"/data/data/carburant.android.com/files/" + name + "." + mark + ".settings.dat;

要使用Import类,请不要将startActivity与Intent一起使用(请记住它现在不是Activity)。在检查按钮按下的代码中,只需使用...

Import myImport(this, name, mark);
myImport.transfer();

请参阅我修改后的代码示例,以便Import构造函数获取名称并标记字符串。

还有一件事,删除你所拥有的那条线......

context = getApplicationContext();

......这不是必要的,会导致问题。