如何将文件复制到Android文件系统?

5
如何将文件复制到Android文件系统中?如何访问它?

1
这是一个编程问题还是用户问题?你是从电脑复制吗?还是从你的安卓设备复制?是复制到SD卡上吗?如果连接到电脑上,你的SD卡是否已经挂载? - David Hedlund
这是一个编程问题。我只需要路径。 我想把一些文件放在用户无法访问的地方。我认为这是最好的方法。 - Alex K
我原以为理解了你的问题,直到我看到了你的评论。你是想要在文件系统中编写文件(即在Dalvik内部运行的代码中)还是尝试通过物理连接部署它们(连接到主机机器)? - Chris Thompson
我不理解你的问题。我不知道Dalvik是什么意思。 我想使用代码将文件写入文件系统(而不是sd卡)。 通过文件系统,我指的是硬文件所在的位置,如果你删除它们,什么都不会工作,甚至看不到它们。 我需要一种方法使文件对用户不可访问。也许你知道更好的方法吗? - Alex K
看看我的回答。Dalvik是执行您的代码的虚拟机,类似于Java虚拟机。请查看此维基百科文章http://en.wikipedia.org/wiki/Dalvik_virtual_machine。 - Chris Thompson
5个回答

11

如何从Android复制文件到本地?

adb pull /data/data/com.example.sample ./sample/

如何从本地复制文件到Android设备?

adb push ./sample/ /sdcard/sample/

+1 如果您更喜欢点击操作,也可以从DDMS应用程序中执行此操作,但那只是这些命令的GUI实现。 - Chris Thompson
我不想复制到SD卡...我想复制到文件系统目录。 - Alex K
我认为你不能直接向Android文件系统目录写入内容。只有通过你正在开发的应用程序才能以编程方式实现。每个应用程序都在/data/data/myApp中拥有受保护的空间,因此这种方式可以防止一个应用程序写入另一个应用程序的文件夹。不过,我对Android开发现在有点陌生,所以我的说法可能不准确。 - Raja
我想以编程的方式来完成它。你知道怎么做吗? 如何获取应用程序文件夹路径? - Alex K
好的,有Context.openFileOutput()方法可以提供一个FileOutputStream来进行写入。以下是您可能需要探索的内容:http://developer.android.com/guide/topics/data/data-storage.html - Raja

2

我不确定这是否是你要问的,但这是对你问题的另一种解释:

您可以在开发机器上的项目中将文件放置在 assets 文件夹中。它们将被捆绑到 apk 文件中,然后通过 AssetManager 类访问它们。 从服务或活动类中可以使用类似以下代码:

AssetManager am = getAssets();
InputStream is = am.open("filename");

这将允许您读取这些文件的内容。但我认为您无法对其进行写入。如果您需要在应用程序的存储沙盒中读写文件,还有其他选项可供选择。通过调用openFileOutput()来完成此操作。但请注意,用户始终可以通过ddms访问设备上的文件,但其他应用程序将无法访问存储在您的应用程序存储沙盒中的文件。 编辑根据您的评论,您可能想使用

OutputStream out = openFileOutput("outfile");

从您的代码中写入文件。此代码必须从ActivityService(扩展Context的内容)中调用。该文件将存储在手机文件系统中,而不是sd卡上。这些文件对普通用户不可访问。如果用户知道如何启用usb调试,则他们将能够访问它们,而这确实没有什么办法可以避免。


1

您可以使用:

Environment.getExternalStorageDirectory()

如果您的设备有SD卡,那么它将会给您/sdcard,否则在其他情况下会给您不同的东西。例如Archos。


我知道这个……但这不是我问的。 - Alex K

1

我之前花了一些时间研究安卓的系统文件,但几乎都是针对安卓x86,我发现在安卓中/system文件夹是只读的。

这是SFS格式的映像文件,这是Linux的只读映像文件格式,因此我认为你无法复制该文件夹内的内容。我不确定有没有root过的安卓可以实现。希望这会对你有所帮助。


0

你可以通过在文件名前加上点(例如:.myfile)的方式将文件隐藏在sdcard中。


在这种情况下,用户可以将设备连接到计算机上,然后查看文件。我说得对吗? - Alex K
如果他从 Windows 计算机浏览 sdcard,是的。但是,如果您真的不希望用户干扰您的文件,请使用资产或原始资源。唯一的缺点是它是只读的。也许您可以使用数据库代替? - Rorist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接