我在android中重命名文件夹然后再次读取文件时遇到了一个非常奇怪的问题。我永远无法在任何或我们的本地测试设备上重现这一点,我知道没有人有个好主意。
renameTo()
重命名文件时,更改子文件夹名称有什么用? File
类指定字符编码的内容)我有一个名为name/
的文件夹,其内容是其他文件和文件夹。 name/
可以是用户生成的文件夹名称。我们的工作涉及多种语言,包括阿拉伯语,中文等。
多个设备上都会出现此问题。
我正在将所有内容从name/
移至.old/name/
。我使用的代码是
File[] dirs = mRootDir.listFiles(FileFilters.FilterDotFiles); // name/ will be in that list
mOldTmp.mkdir(); //create the .old folder
for(File f : dirs) { //move all dirs into .old
File oldSubDir = new File(mOldTmp, f.getName());
boolean renameSuccess = f.renameTo(oldSubDir); //true, as I otherwise would never run into the problem later in code.
}
文件全部移动。似乎文件夹名称在某些情况下搞砸了。当我稍后列出.old
文件夹中的文件时:
for(File dir : mOldTmp.listFiles(FileFilters.FilterFiles)) {
for(File f : dir.listFiles(FileFilters.FilterDotFiles)) {
}
}
我获取具有以下路径的文件。这个特别的人是阿拉伯语用户。在尝试通过创建新new InputSteam(new FileInputStream(f))
来阅读文件时,我得到IOException
:
.old/ÃÂçÃÂÃÂÃÂÃÂÃÂìÃÂÃÂÃÂï ÃÂçÃÂÃÂÃÂãÃÂóÃÂçÃÂóÃÂÃÂ/1392446611086.mzvg2bn56i1rsqe4ko1_1280.jpeg
open failed: ENOENT (No such file or directory)
用户抱怨文件不再可见。这是有道理的,因为我无法读取它们,但这也意味着该文件在重命名开始之前就已可用。
测试1:当我adb push
一个带有阿拉伯字符的name/
文件夹并运行我的代码时,renameTo()
文件操作和一切都按预期工作。
测试2:我可以在计算机上创建一个名为name/
的{{1}}文件夹。这在OSX 10.8.5上运行良好。当我尝试使用ÃÂçÃÂÃÂÃÂÃÂÃÂìÃÂÃÂÃÂï ÃÂçÃÂÃÂÃÂãÃÂóÃÂçÃÂóÃÂÃÂ
时,我得到相同的错误
adb push
显示此目录的内容不一致:
$ adb push . /mnt/sdcard/debug
push: ./.old/ÃÂçÃÂÃÂÃÂÃÂÃÂìÃÂÃÂÃÂï ÃÂçÃÂÃÂÃÂãÃÂóÃÂçÃÂóÃÂÃÂ/.thumbs/1398208681403.2013-12-24 15.11.43.jpg -> /mnt/sdcard/debug/.old/ÃÂçÃÂÃÂÃÂÃÂÃÂìÃÂÃÂÃÂï ÃÂçÃÂÃÂÃÂãÃÂóÃÂçÃÂóÃÂÃÂ/.thumbs/1398208681403.2013-12-24 15.11.43.jpg
failed to copy './.old/ÃÂçÃÂÃÂÃÂÃÂÃÂìÃÂÃÂÃÂï ÃÂçÃÂÃÂÃÂãÃÂóÃÂçÃÂóÃÂÃÂ/.thumbs/1398208681403.2013-12-24 15.11.43.jpg' to '/mnt/sdcard/debug/.old/ÃÂçÃÂÃÂÃÂÃÂÃÂìÃÂÃÂÃÂï ÃÂçÃÂÃÂÃÂãÃÂóÃÂçÃÂóÃÂÃÂ/.thumbs/1398208681403.2013-12-24 15.11.43.jpg': No such file or directory
$ ls -l .old/
total 0
drwxr-xr-x 24 philipp staff 816B Apr 25 11:54 Ã?Â?Ã?§Ã?Â?Ã?Â?Ã?Â?Ã?Â?Ã?Â?Ã?¬Ã?Â?Ã?Â?Ã?Â?Ã?¯ Ã?Â?Ã?§Ã?Â?Ã?Â?Ã?Â?Ã?£Ã?Â?Ã?³Ã?Â?Ã?§Ã?Â?Ã?³Ã?Â?Ã?Â
下次运行
$ ls -l .old/ÃÂçÃÂÃÂÃÂÃÂÃÂìÃÂÃÂÃÂï\ ÃÂçÃÂÃÂÃÂãÃÂóÃÂçÃÂóÃÂÃÂ/
total 69880
-rw-r--r-- 1 philipp staff 571K Apr 22 17:13 1398208669809.2014-02-08 14.26.50.jpg
-rw-r--r-- 1 philipp staff 2.2M Apr 22 17:13 1398208670282.2014-02-08 14.22.11.jpg
-rw-r--r-- 1 philipp staff 2.1M Apr 22 17:13 1398208670990.2014-02-08 14.21.11.jpg
... more files
当我$ ls -l .old/ÃÂçÃÂÃÂÃÂÃÂÃÂÃa¬ÃÂÃÂÃÂï\ ÃÂçÃÂÃÂÃÂãÃÂóÃÂçÃÂóÃÂÃÂ/
ls: .old/ÃÂçÃÂÃÂÃÂÃÂÃÂÃa¬ÃÂÃÂÃÂï ÃÂçÃÂÃÂÃÂãÃÂóÃÂçÃÂóÃÂÃÂ/: File name too long
进入cd
时,我总是可以列出整个内容。