V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
SvenSven
V2EX  ›  Android

android .3gpp后缀名文件的文件名有长度限制??? 项目里出现了个奇怪的问题,如下:

  •  
  •   SvenSven · Mar 27, 2013 · 14352 views
    This topic created in 4780 days ago, the information mentioned may be changed or developed.
    deletefile = new File(getFilePathFromEvalItem(mItem));
    Log.d("deletefile", deletefile.getAbsolutePath());
    if(deletefile.exists()){
    Log.d("file:","exists!" );
    boolean deleted = deletefile.delete();
    Log.d("deleted:",String.valueOf(deleted) );
    }else {
    Log.d("file:","not exists!" );
    }
    看上面的代码:
    当solutePath= /mnt/sdcard/MoodMeter/voices/VIOCE_1364290165465GXTX_1364357242049YVJU.3gpp
    时后台log出 file: not exists!
    当solutePath= /mnt/sdcard/MoodMeter/voices/1364357242049YVJU.3gpp
    时后台log出 file: exists!
    而文件都是真实存在于文件系统的,
    所以很明显是因为第一个的文件名太长,而导致读取不了,
    所以第二个正常读取到了

    那么,如果我要保留文件名的长度,而且可以读取,有什么方法实现呢?

    注意:经本人实测,后缀名为.3gp , .jpg等其他文件的文件名再长也不会出现上述问题,
    是不是只有声音文件的文件名有限制呢?
    14 replies    1970-01-01 08:00:00 +08:00
    peizh2006
        1
    peizh2006  
       Mar 27, 2013
    getFilePathFromEvalItem的实现?
    感觉Android不会犯这种错误。
    SvenSven
        2
    SvenSven  
    OP
       Mar 27, 2013
    那个是我自己写的方法,返回值是路径:
    例如: /mnt/sdcard/MoodMeter/voices/VIOCE_1364290165465GXTX_1364357242049YVJU.3gpp
    ljbha007
        3
    ljbha007  
       Mar 27, 2013
    你把那个文件改个很短的名字
    然后用getFilePathFromEvalItem返回 看看还会不会出现文件不存在的状况

    你给的条件无法得出“因为文件名太长而无法找到文件”的结论
    SvenSven
        4
    SvenSven  
    OP
       Mar 27, 2013
    你说的就是上面提到的第二种情况,
    getFilePathFromEvalItem返回/mnt/sdcard/MoodMeter/voices/1364357242049YVJU.3gpp
    后台log出文件存在
    SvenSven
        5
    SvenSven  
    OP
       Mar 27, 2013
    @ljbha007
    你说的就是上面提到的第二种情况,
    getFilePathFromEvalItem返回/mnt/sdcard/MoodMeter/voices/1364357242049YVJU.3gpp
    后台log出文件存在
    SvenSven
        6
    SvenSven  
    OP
       Mar 27, 2013
    ljbha007
        7
    ljbha007  
       Mar 27, 2013
    @SvenSven 我是说 同一个文件 重命名之后比如改成 a.3gpp
    有可能只是那一个文件的问题
    SvenSven
        8
    SvenSven  
    OP
       Mar 27, 2013
    @ljbha007
    试过,可以播放的
    ljbha007
        9
    ljbha007  
       Mar 27, 2013
    @SvenSven
    我没有问你是不是可以播放 我问你的是 改了文件名之后你这段代码 是否是显示exist!
    SvenSven
        10
    SvenSven  
    OP
       Mar 28, 2013
    是显示exist!,
    如果还不相信的话,就自己用类似与上面的代码试一试吧
    SvenSven
        11
    SvenSven  
    OP
       Mar 28, 2013
    SvenSven
        12
    SvenSven  
    OP
       Mar 28, 2013
    ljbha007
        13
    ljbha007  
       Mar 28, 2013
    @SvenSven 你里边单词拼错了 VOICE拼成了VIOCE
    SvenSven
        14
    SvenSven  
    OP
       Mar 29, 2013
    @ljbha007 ,嗯,是写错了,但是不会影响到程序的,
    如果你有安装开发环境的话,
    建议你试一下,
    将一个.3gpp文件 的文件名改长(例如:VOICE_1364290165465GXTX_1364357242049YVJU.3gpp),然后执行

    File deletefile= new File(你的文件路径);
    if(deletefile.exists()){
    Log.d("file:","exists!" );
    boolean deleted = deletefile.delete();
    Log.d("deleted:",String.valueOf(deleted) );
    }else {
    Log.d("file:","not exists!" );
    }

    这里需要加个权限uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    到AndroidManifest.xml 里

    试一下到底神马结果
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5615 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 08:23 · PVG 16:23 · LAX 01:23 · JFK 04:23
    ♥ Do have faith in what you're doing.