Java 在连接到PC的移动设备上读取和写入数据
我正在尝试创建一个jar客户端,在连接到用户PC的android平板电脑中读取.db文件。现在,我必须手动将文件移动到windows文件系统,然后手动将文件移回 试图使用jmtp,但不起作用 我的任务是读取文件,将文件复制到设备上的其他位置,并执行一些操作 我该怎么做Java 在连接到PC的移动设备上读取和写入数据,java,file,mobile,Java,File,Mobile,我正在尝试创建一个jar客户端,在连接到用户PC的android平板电脑中读取.db文件。现在,我必须手动将文件移动到windows文件系统,然后手动将文件移回 试图使用jmtp,但不起作用 我的任务是读取文件,将文件复制到设备上的其他位置,并执行一些操作 我该怎么做 PortableDeviceManager manager = new PortableDeviceManager(); PortableDevice device = manager.getDevices()[0
PortableDeviceManager manager = new PortableDeviceManager();
PortableDevice device = manager.getDevices()[0];
// Connect to my mp3-player
device.open();
System.out.println(device.getModel());
System.out.println("---------------");
// Iterate over deviceObjects
for (PortableDeviceObject object : device.getRootObjects()) {
// If the object is a storage object
if (object instanceof PortableDeviceStorageObject) {
PortableDeviceStorageObject storage = (PortableDeviceStorageObject) object;
for (PortableDeviceObject o2 : storage.getChildObjects()) {
if(o2.getOriginalFileName().equals("copagazmobile")){
PortableDeviceFolderObject storage1 = (PortableDeviceFolderObject) o2;
for (PortableDeviceObject o3 : storage1.getChildObjects()) {
if(o3.getOriginalFileName().equals("backupdatabases")){
PortableDeviceFolderObject folder = (PortableDeviceFolderObject) o3;
System.out.println(o3);
System.out.println(folder);
}
}
System.out.println(o2.getOriginalFileName());
}
}
}
}
manager.getDevices()[0].close();
使用一个不同的库是必要的,我正在使用一个名为jmtpe的库 用于读取文件并发送到主机的代码:
PortableDeviceManager manager = new PortableDeviceManager();
PortableDevice device = manager.getDevices()[0];
device.open();
System.out.println("Dispositivo: " + device.getModel());
System.out.println("---------------");
System.out.println("Recuperando arquivo do Tablet");
// Iterate over deviceObjects
for (PortableDeviceObject object : device.getRootObjects()) {
// If the object is a storage object
if (object instanceof PortableDeviceStorageObject) {
PortableDeviceStorageObject storage = (PortableDeviceStorageObject) object;
for (PortableDeviceObject o2 : storage.getChildObjects()) {
if(o2.getOriginalFileName().equals("copagazmobile")){
PortableDeviceFolderObject storage1 = (PortableDeviceFolderObject) o2;
for (PortableDeviceObject o3 : storage1.getChildObjects()) {
if(o3.getOriginalFileName().equals("backupdatabases")){
PortableDeviceFolderObject storage2 = (PortableDeviceFolderObject) o3;
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_hhmm");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 1900);
Date data = calendar.getTime();
String idFile = null;
String fileName = null;
for (PortableDeviceObject o4 : storage2.getChildObjects()) {
String dataArq = (o4.getOriginalFileName().substring(15, 28));
try {
if(new Date(format.parse(dataArq).getTime()).after(data)){
data = new Date(format.parse(dataArq).getTime());
idFile = o4.getID();
fileName = o4.getOriginalFileName();
}
} catch (ParseException e) {
e.printStackTrace();
}
}
PortableDeviceToHostImpl32 host = new PortableDeviceToHostImpl32();
try {
File f = new File( "c://sqlite//db");
System.out.println("Limpando diretório de manipulação: " + f);
FileUtils.cleanDirectory(f);
System.out.println("Copiando arquivo: " + fileName );
host.copyFromPortableDeviceToHost(idFile, "c:/sqlite/db", device);
f = new File( "c://sqlite//db//"+fileName);
File novoArquivo = new File( "c://sqlite//db//copagaz_mobile_desenv.db");
InputStream inStream = null;
OutputStream outStream = null;
inStream = new FileInputStream(f);
outStream = new FileOutputStream(novoArquivo);
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) > 0){
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
f.delete();
} catch (COMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Arquivo mais recente é de: " + data);
}
}
}
}
}
}
manager.getDevices()[0].close();
并将文件发送回:
PortableDeviceManager manager = new PortableDeviceManager();
PortableDevice device = manager.getDevices()[0];
device.open();
System.out.println("---------------");
System.out.println("Enviando arquivo para o Tablet");
// Iterate over deviceObjects
for (PortableDeviceObject object : device.getRootObjects()) {
// If the object is a storage object
if (object instanceof PortableDeviceStorageObject) {
PortableDeviceStorageObject storage = (PortableDeviceStorageObject) object;
for (PortableDeviceObject o2 : storage.getChildObjects()) {
if(o2.getOriginalFileName().equals("copagazmobile")){
PortableDeviceFolderObject storage1 = (PortableDeviceFolderObject) o2;
for (PortableDeviceObject o3 : storage1.getChildObjects()) {
if(o3.getOriginalFileName().equals("restore")){
PortableDeviceFolderObject host = (PortableDeviceFolderObject) o3;
try {
File f = new File( "c://sqlite//db//copagaz_mobile_desenv.db");
System.out.println("Copiando arquivo .db para o Tablet");
host.addAudioObject(f, "0", "1", new BigInteger("12345"));
System.out.println("Arquivo copiado");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
}
manager.getDevices()[0].close();
“我试图使用jmtp但不起作用”的确切含义是什么?我阅读了storage.getChildObjects(),获得了我想要的目录,但下一步该怎么办?因此,您复制了一些无法立即工作的代码,因此发布了此问题。你做过任何研究吗?当然,我做过,但我不知道如何访问我想要的路径,然后复制文件…你有AccessControll异常,因为我遇到了这个错误吗?