Android:当文件名有空格时设置文件权限时出现问题

Android:当文件名有空格时设置文件权限时出现问题,android,runtime.exec,Android,Runtime.exec,有一个应用程序,我将.png图像存储在该应用程序的缓存目录中,由于我通过消息等方式共享这些文件,我需要使每个人都能临时读取这些文件(即chmod 755) 正如在另一个线程中所建议的,我正在运行Runtime.getRuntime.exec()来执行以下操作: Runtime.getRuntime().exec("setperm chmod 755 /path/to/filename.png"); 这很好用,因为我正在过滤/和\,任何名字都有效。。。除了一个有空格的名字,这是无与伦比的。这失败

有一个应用程序,我将.png图像存储在该应用程序的缓存目录中,由于我通过消息等方式共享这些文件,我需要使每个人都能临时读取这些文件(即chmod 755)

正如在另一个线程中所建议的,我正在运行Runtime.getRuntime.exec()来执行以下操作:

Runtime.getRuntime().exec("setperm chmod 755 /path/to/filename.png");
这很好用,因为我正在过滤/和\,任何名字都有效。。。除了一个有空格的名字,这是无与伦比的。这失败了:

Runtime.getRuntime().exec("setperm chmod 755 /path/to/file name.png");
因此,来自linux,我尝试将文件路径用引号括起来,这在linux上有效,但在Android上仍然无法更改文件的perms:

Runtime.getRuntime().exec("setperm chmod 755 \"/path/to/file name.png\"");
or
Runtime.getRuntime().exec("setperm chmod 755 '/path/to/file name.png'");
有什么想法吗

谢谢

保罗

有一个应用程序,我将.png图像存储在该应用程序的缓存目录中,由于我通过消息等方式共享这些文件,我需要使每个人都能临时读取这些文件(即chmod 755)

不要将它们放在缓存目录中。使用
openFileOutput()
并设置
MODE\u WORLD\u READABLE

正如在另一个线程中所建议的,我正在运行Runtime.getRuntime.exec()来执行以下操作:

Runtime.getRuntime().exec("setperm chmod 755 /path/to/filename.png");
向你建议的人是个白痴。任何Android应用程序都不应使用
exec()
。没有作为SDK一部分的命令行二进制文件,您可以依赖它们


更新

在一篇文章中,黛安娜·哈克伯恩(@hackbod)写道:

推荐的方法是编写一个内容提供程序,其他应用程序可以调用ContentResolver.openFileDescriptor()等。编写这样的内容提供程序实际上非常简单——它不需要数据库或任何东西,只需要实现ContentProvider.openFile()

我所看到的每一种情况,在使用MODE_WORLD_u*时,都会比编写内容提供者带来更多的麻烦。我后悔做了那件事

有一个应用程序,我将.png图像存储在该应用程序的缓存目录中,由于我通过消息等方式共享这些文件,我需要使每个人都能临时读取这些文件(即chmod 755)

不要将它们放在缓存目录中。使用
openFileOutput()
并设置
MODE\u WORLD\u READABLE

正如在另一个线程中所建议的,我正在运行Runtime.getRuntime.exec()来执行以下操作:

Runtime.getRuntime().exec("setperm chmod 755 /path/to/filename.png");
向你建议的人是个白痴。任何Android应用程序都不应使用
exec()
。没有作为SDK一部分的命令行二进制文件,您可以依赖它们


更新

在一篇文章中,黛安娜·哈克伯恩(@hackbod)写道:

推荐的方法是编写一个内容提供程序,其他应用程序可以调用ContentResolver.openFileDescriptor()等。编写这样的内容提供程序实际上非常简单——它不需要数据库或任何东西,只需要实现ContentProvider.openFile()

我所看到的每一种情况,在使用MODE_WORLD_u*时,都会比编写内容提供者带来更多的麻烦。我后悔做了那件事


在开发过程中,如果您想访问应用程序的数据,但又不想在手机上设置根目录,那么exec()解决方案可以很好地工作。我同意不应在生产代码中使用它,但它确实为我节省了大量时间,只需启动模拟器即可访问我的数据库。

在开发过程中,如果您想访问应用程序的数据,但又不想在手机上设置根目录,exec()解决方案就可以很好地工作。我同意不应在生产代码中使用它,但它确实为我节省了大量时间,只需启动模拟器即可访问我的数据库。

为什么不将所有空格都改为下划线?确实可以这样做,我只是想知道为什么空格会失败,我是否做了一些不正确的事情。你为什么不把所有空格都改成下划线呢?确实可以这样做,我只是想知道为什么空格会失败,我是否做了一些不正确的事情。谢谢你在Dianne的评论中提供的信息和编辑。将使用所述的COntentProvider方法。感谢您在Dianne的评论中提供的信息和编辑。将按照所述使用COntentProvider方法。