我想在我的应用中以编程方式创建符号链接. Android(4.4)是否可能?
在Java中,我们可以使用:
Path newlink = ...;Path target = ...;try { files.createSymboliclink(newlink, target);} catch (IOException x) { System.err.println(x);} catch (UnsupportedOperationException x) { // Some file systems do not support symbolic links. System.err.println(x);}
从java.nio.file但我应该在AndroID中使用什么?
https://docs.oracle.com/javase/tutorial/essential/io/links.html
编辑:
我使用反射/本机代码/OS.symlink()方法进行了测试,但没有任何效果.我总是收到不允许的 *** 作(EPERM).我认为您必须具有root权限才能创建符号链接.
问题可能出在/ mnt / sdcard是包装/ data / media / xxx的FUSE填充程序.所以我开始使用/ data / media / xxx,但是我总是被拒绝
我认为root权限存在问题.
解决方法:
这是一个对我有用的解决方案,如果成功则返回true:
public static boolean createSymlink(String symlinkfilePath, String originalfilePath) { try { if (VERSION.SDK_INT >= VERSION_CODES.LolliPOP) { Os.symlink(originalfilePath, symlinkfilePath); return true; } final Class<?> libcore = Class.forname("libcore.io.libcore"); final java.lang.reflect.FIEld fOs = libcore.getDeclaredFIEld("os"); fOs.setAccessible(true); final Object os = fOs.get(null); final java.lang.reflect.Method method = os.getClass().getmethod("symlink", String.class, String.class); method.invoke(os, originalfilePath, symlinkfilePath); return true; } catch (Exception e) { e.printstacktrace(); } return false;}
或在科特林:
companion object { @JvmStatic fun createSymlink(symlinkfilePath: String, originalfilePath: String): Boolean { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LolliPOP) { Os.symlink(originalfilePath, symlinkfilePath) return true } val libcore = Class.forname("libcore.io.libcore") val fOs = libcore.getDeclaredFIEld("os") fOs.isAccessible = true val os = fOs.get(null) val method = os.javaClass.getmethod("symlink", String::class.java, String::class.java) method.invoke(os, originalfilePath, symlinkfilePath) return true } catch (e: Exception) { e.printstacktrace() } return false }}
总结 以上是内存溢出为你收集整理的Java-Android-在应用程序中创建符号链接全部内容,希望文章能够帮你解决Java-Android-在应用程序中创建符号链接所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)