【问题标题】:Netbeans can't read utf8 file names in macNetbeans 无法在 mac 中读取 utf8 文件名
【发布时间】:2013-05-01 08:22:31
【问题描述】:

我的 Eclipse 上有一个项目,其中一种方法是从文件夹中读取文件列表。 当我从 Eclipse 或导出的 jar 中运行它时,它很好并且效果很好。

但是我的 netbeans 上有另一个项目用于此应用程序的 GUI,其中包含导出的 jar(工作正常),但是当我从 netbeans 运行或导出此项目时,它无法读取非英语文件名,它正在将文件名转换为类似的东西

???????? ???? ??? .mp3 

我尝试将-J-Dfile.encoding=UTF-8 添加到netbeans.conf 我还尝试在 netbeans 项目属性中选择编码,但没有运气。

这里有一些代码:

public SFile(String path, FileFilter filter) {
    File f = null;
    f = new File(path);
    directory = f.isDirectory();
    if (directory) {
        children = new ArrayList<SFile>();
        File[] ki = f.listFiles(filter); // here i see the ???? ????.mp3
        ArrayList<File> kids = new ArrayList<File>();
        Collections.addAll(kids, ki);
        Collections.sort(kids, comparator);
        for (File k : kids) {
            if (k.isDirectory() && k.listFiles(filter).length == 0) {
                continue;
            }
            children.add(new SFile(k.getAbsolutePath(), filter));
        }
    } else {
        // some more code...
    }
}

过滤代码:

new FileFilter() { 
     public boolean accept(final File pathname) { 
     try {
         return pathname.getCanonicalPath().endsWith(".mp3") || pathname.isDirectory();
     } catch (final IOException e) {
     e.printStackTrace(); 
     } 
     return false; 
     }
};

我的项目依赖:

/Users/dima/Dev/RSLib/asm-3.1.jar
/Users/dima/Dev/RSLib/grizzly-framework-2.2.16.jar
/Users/dima/Dev/RSLib/grizzly-http-2.2.16.jar
/Users/dima/Dev/RSLib/grizzly-http-server-2.2.16.jar
/Users/dima/Dev/RSLib/grizzly-rcm-2.2.16.jar
/Users/dima/Dev/RSLib/gson-2.2.2.jar
/Users/dima/Dev/RSLib/javax.servlet-api-3.1-b05.jar
/Users/dima/Dev/RSLib/jersey-bundle-1.16.jar
/Users/dima/Dev/RSLib/jersey-core-1.16.jar
/Users/dima/Dev/RSLib/jersey-grizzly2-1.16.jar
/Users/dima/Dev/RSLib/jersey-server-1.16.jar
/Users/dima/Dev/RSLib/jsr311-api-1.1.1.jar
/Users/dima/Dev/RSLib/log4j-1.2.17.jar
/Users/dima/Dev/RSLib/jid3lib-0.5.4.jar
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/cling-mediarenderer-2.0-alpha2-standalone.jar
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/cling-workbench-2.0-alpha2-standalone.jar
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/core/seamless-http-1.0-alpha2.jar
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/core/seamless-util-1.0-alpha2.jar
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/core/seamless-xml-1.0-alpha2.jar
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/support/cling-support-2.0-alpha2.jar
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/core/cling-core-2.0-alpha2.jar
/Users/dima/Dev/RSLib/MpegAudioSPI1.9.5/mp3spi1.9.5.jar
/Users/dima/Dev/RSLib/MpegAudioSPI1.9.5/lib/jl1.0.1.jar
/Users/dima/Dev/RSLib/MpegAudioSPI1.9.5/lib/tritonus_share.jar

【问题讨论】:

  • 您是在读取文件名列表然后在 GUI 中显示它们吗?如果是这样,让我们​​看看显示代码。
  • 不,我没有显示它们,我将所有文件索引到带有递增 ID 的哈希图,当我停止调试时,我看到非英文文件名是 ???????.mp3 和java 无法读取它们
  • "我看到非英文文件名是???????.mp3" 你在哪里看到它们?在IDE的某个地方?在手表上?在输出窗格中?
  • 查看读取文件名的实际代码也很有用
  • 我在调试时看到它,有一个字符串路径(一个很好的,英文),我创建一个文件 f,并在其中执行 listFiles(),当我观看返回时数组,非英文的是“??????.mp3”,我更新了我的问题,添加了代码。

标签: java netbeans encoding utf-8 filenames


【解决方案1】:

如果您在 java 7 上,listFiles 在 mac OS X 上被报告损坏 - 请参阅here 和那里的链接。如果更新不能解决问题,您应该考虑moving to nio - 或查看here
我想看看你在listFiles(filter);传递的过滤器

【讨论】:

  • 奇怪的事情,当我像你在main方法中所说的那样使用nio时,它可以工作(目前在eclipse上)但是当我在我的代码中使用它时,它也返回“??? ?? ??????.mp3",有什么想法吗?
  • @DimaGoltsman:您尝试过最新的 java 1.7 吗?另外,请务必发布 所有修改路径名的代码 我怀疑您(或您的依赖项)正在使用默认编码调用 String 构造函数
  • 安装了JDKu21,还是一样
  • 我刚刚注意到,在 JFileChooser 本身中,它也是未知符号而不是真实文件名...
  • @DimaGoltsman :请删除javax.servlet-api-3.1-b05.jar - 它会导致各种疯狂的行为 - 可能是原因。可能您应该继续删除类路径中的其他 jar - 请阅读:stackoverflow.com/a/1993522/281545。您这样做是因为没有在 netbeans 中设置服务器?继续设置服务器!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多