【问题标题】:JFileChooser delivers file name as nullJFileChooser 将文件名作为空值传递
【发布时间】:2014-02-25 03:54:00
【问题描述】:

我一直在用 Java 编写音频/视频转换器。除了 JFileChooser 之外,一切都运行顺利。 (我通常使用 AWT FileDialog 来选择文件,但不能在这个项目中使用它,因为我听说 FileDialog 是 OS Dependent - 请告知。)

这是我的文件选择过程的工作原理:

  • 我已经定义了一个公共字符串 fileLocn。 fileLocn 将包含所选文件的位置。

  • 我的程序使用 Swing。有一个 JButton 将打开 JFIleChooser,称为 FilePicker。 FilePicker 的代码如下:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    JFileChooser FilePicker=new JFileChooser();
    int returnVal = FilePicker.showOpenDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
    File file=FilePicker.getSelectedFile();
    formatpanel.setEnabled(true);
    fileLocn=FilePicker.getCurrentDirectory().toString()+"\\"+FilePicker.getName();
    filelocation.setText(fileLocn);
    }
    
  • FilePicker 选择文件并将其位置提供给字符串 fileLocn,该字符串用作另一个文件的位置。请注意,文件位置 TextField 是装饰性的,不会在主代码中使用。

这就是问题出现的地方。 getCurrentDirectory() 命令工作正常,但 getName() 命令作为 null 传递。因此,如果我在 C: 驱动器的“视频”文件夹中选择文件 FQSEMI.mp4,它会显示为 C:\Videos\null 而不是所需的 C:\Videos\FQSEMI。

请指出我的代码有什么问题。谢谢。

(P.S. 保证对相关答案投赞成票,我会在学分中提到你:))

【问题讨论】:

    标签: java string swing file jfilechooser


    【解决方案1】:

    您将获得JFileChoosername 属性,而不是选择的文件...

    而不是...

    fileLocn=FilePicker.getCurrentDirectory().toString()+"\\"+FilePicker.getName()
    

    你会发现...

    fileLocn=file.getPath();
    

    会做你想做的事 - 以平台中立的方式...记住,只有 Windows 使用 \ 作为分隔符,在 Mac 或基于 Unix 的系统上这样做不会导致问题结束。如果确实必须提供分隔符,可以在 Windows 上使用/,但通常最好使用File.separator

    根据 cmets 更新

    基本上,您需要从扩展名中提取名称,您可以执行类似的操作..

    String fileWithoutExt = fileLocn.substring(0, fileLocn.indexOf("."));
    

    While 将删除最后一个 . 之后的所有内容,包括最后一个 .

    所以,如果您有一个值为FQSEMI.mp4String,它将返回FQSEMI

    【讨论】:

    • 另一个问题:创建的文件被标记为 FQSEMI.mp4.flv。如何简单地将其命名为 FQSEMI.flv?
    • 你从JFileChooser得到后是不是在修改名字?如果有怎么办?
    • 这就是正在发生的事情:您的 getFile 命令为我获取路径,然后将其存储在 fileLocn 中。我有另一种字符串格式,它为视频分配格式。现在我有两个文件: File src=new File(fileLocn);和文件 trgt=new File(fileLocn+format);我如何停止 FilePicker 以将其扩展名传达给最终标题,即。最终文件应该是 FQSEMI.flv,而不是 FQSEMI.mp4.flv
    • 线程“AWT-EventQueue-0”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:-1 at java.lang.String.substring(String.java:1911)
    • 还有一件事:您正在修改 fileLocn。我不想修改 fileLocn,所以我构建了一个名为 filex 的新字符串,它为我提取文件名。
    【解决方案2】:

    当你们都是filePicker.getName() 时,您正在检索JFileChooser 对象本身的名称。相反,您需要所选文件的名称。要获得此信息,请致电filePicker.getSelectedFile().getName()。更好的是,获取文件的路径,而不是通过连接字符串来构造路径:

    fileLocn = filePicker.getSelectedFile().getPath();
    

    (请注意,在 Java 中,我们倾向于以小写字符开头来命名变量,以避免与类混淆。这也将有助于像本网站上使用的语法荧光笔一样。)

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 2022-01-15
      相关资源
      最近更新 更多