我有一个Android专用主板(A100)这个主板有一些串口和USB端口。 USB端口可以像主机或客户端一样工作。
所以我插上了一个USB pendrive,这很好用。 我可以写这个pendrive并从中读取。
我的问题: 我创建了一个应用程序,这个应用程序到达pendrive。当我将文件写入pendrive时,系统会指示写入成功。但是,如果我插上pendrive并插入我的电脑,那么我会识别这些文件,但所有文件都是0。 当我在pendrive中停留更多时间然后安卓并退出我的应用程序,那么文件将是正确的(并且大小也正确)
我认为有一种缓存机制。我能做什么?如何感知真实的文件写入? 我认为COPYFILE函数是错误的。
public static final String USBDISK = "/mnt/udisk1/disk-1/";
public void call_upload(View v){
File directory = getDir("data", Context.MODE_PRIVATE);
File sdcard = new File(consts.USBDISK);
if ( !copyToExternal(directory, sdcard)) {
Log.d(consts.logID, "No USB");
}
}
public boolean copyToExternal(File directory, File sdcard){
boolean res = true;
try {
File newFolder = new File(sdcard, "newfolder");
if (!newFolder.exists()) {
newFolder.mkdir();
}
try {
Log.d("Files", "FileName:" + directory.getName());
File f = directory;
File file[] = f.listFiles();
Log.d("Files", "Size: "+ file.length);
String s;
for (int i=0; i < file.length; i++)
{
s = file[i].getName();
if (s.substring(0,4).compareTo(consts.xlsNapi.substring(1))==0){
consts.copyFile(new File(directory, s),new File(newFolder, s));
Log.d("Files", "FileName:" + s);
} else {
Log.d("Files", "Not copied:" + s + "("+s.substring(0,4)+","+consts.xlsNapi.substring(1)+")");
}
}
//consts.copyFile(new File(newFolder, consts.xlsSetup), new File(directory, consts.xlsSetup));
consts.longHint(this,"Files copied!");
} catch (Exception ex) {
res = false;
System.out.println("ex: " + ex); //ex: java.io.FileNotFoundException: /storage/sdcard0/cashregister_v1/setup.xls: open failed: ENOENT (No such file or directory)
}
} catch (Exception e) {
System.out.println("e: " + e);
res = false;
}
return res;
}
public static boolean copyFile(File src,File dst)throws IOException{
if(src.getAbsolutePath().toString().equals(dst.getAbsolutePath().toString())){
return true;
}else{
InputStream is=new FileInputStream(src);
OutputStream os=new FileOutputStream(dst);
byte[] buff=new byte[1024];
int len;
while((len=is.read(buff))>0){
os.write(buff,0,len);
}
is.close();
os.flush();
os.close();
}
return true;
}