(我开始在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
感谢您的帮助。
答案 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();
......这不是必要的,会导致问题。