跨设备在相同的相对位置重新创建文件
Recreate file in same relative location across devices
我想将在一台 Android 设备上找到的文件路径发送到另一台 Android 设备,并在与之前设备相同的相对位置重新创建该文件。
我们无法保证品牌、型号、API 级别或类似内容。
我可以这样做吗?
本质上我想知道我是否可以使用某种类型的 File.get*Path() 而无需做任何超级花哨的事情。
基本上,没有办法像调用 File.java 中的 get*Path() 函数那样简单地完成此操作,但这里有一个可以完成的通用算法。
通用算法:
- 确定该文件存在于设备 A 上的哪个已知根目录下。
- 将已知的根名称和文件的规范路径发送到设备 B
在设备 B 上,使用相对于已知根目录的路径创建文件。
//assume these constants are accessible on device A and B
public static String FILES_DIR = "f";
public static String EXTERNAL_FILES_DIR = "e";
//Device A:
File f = new File(getFilesDir(), "test.txt");
String canonicalPath = f.getCanonicalPath();
Packet p = new Packe(FILES_DIR, canonicalPath);
sendPacket(p, DEVICE_B);
//Device B:
Packet p = receivePacket();
String token = p.getToken();
String canonicalPath = p.getCanonicalPath();
if (token.equals(FILES_DIR)) {
File f = new File(getFilesDir(), relativizeToRoot(FILES_DIR, canonicalPath));
writeFile(f);
} else if (token.equals(EXTERNAL_DIR)) {
File f = new File(getExternalFilesDir(), relativizeToRoot(EXTERNAL_FILES_DIR, canonicalPath));
}
这通常是 Google 在备份可能在具有此处引用的不同文件结构的设备上重新创建的文件时的做法 http://androidxref.com/4.4.2_r2/xref/frameworks/base/core/java/android/app/backup/BackupAgent.java#315
我想将在一台 Android 设备上找到的文件路径发送到另一台 Android 设备,并在与之前设备相同的相对位置重新创建该文件。
我们无法保证品牌、型号、API 级别或类似内容。
我可以这样做吗?
本质上我想知道我是否可以使用某种类型的 File.get*Path() 而无需做任何超级花哨的事情。
基本上,没有办法像调用 File.java 中的 get*Path() 函数那样简单地完成此操作,但这里有一个可以完成的通用算法。
通用算法:
- 确定该文件存在于设备 A 上的哪个已知根目录下。
- 将已知的根名称和文件的规范路径发送到设备 B
在设备 B 上,使用相对于已知根目录的路径创建文件。
//assume these constants are accessible on device A and B public static String FILES_DIR = "f"; public static String EXTERNAL_FILES_DIR = "e"; //Device A: File f = new File(getFilesDir(), "test.txt"); String canonicalPath = f.getCanonicalPath(); Packet p = new Packe(FILES_DIR, canonicalPath); sendPacket(p, DEVICE_B); //Device B: Packet p = receivePacket(); String token = p.getToken(); String canonicalPath = p.getCanonicalPath(); if (token.equals(FILES_DIR)) { File f = new File(getFilesDir(), relativizeToRoot(FILES_DIR, canonicalPath)); writeFile(f); } else if (token.equals(EXTERNAL_DIR)) { File f = new File(getExternalFilesDir(), relativizeToRoot(EXTERNAL_FILES_DIR, canonicalPath)); }
这通常是 Google 在备份可能在具有此处引用的不同文件结构的设备上重新创建的文件时的做法 http://androidxref.com/4.4.2_r2/xref/frameworks/base/core/java/android/app/backup/BackupAgent.java#315