JFileChooser将文件名传递为null

时间:2014-02-25 03:54:00

标签: java string swing file jfilechooser

我一直在用Java编写音频/视频转换器。除了JFileChooser之外,一切都很顺利。 (我通常使用AWT FileDialog来选择文件但不能在这个项目中使用它,因为我听说过FileDialog是操作系统依赖的 - 请指教。)

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

  • 我已经定义了一个公共String 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:驱动器的“Videos”文件夹中选择文件FQSEMI.mp4,它将显示为C:\ Videos \ null而不是所需的C:\ Videos \ FQSEMI。

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

(P.S。保证赞成相关答案,我会在学分中提及你:))

2 个答案:

答案 0 :(得分:2)

您正在获取name的{​​{1}}属性,而不是已选择的文件...

而不是......

JFileChooser

你会发现......

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

将以平台中立的方式执行您想要的操作...请记住,只有Windows使用fileLocn=file.getPath(); 作为分隔符,在Mac或基于Unix的系统上执行此操作将导致问题无法解决。如果您确实必须提供分隔符,则可以在Windows上使用\,但通常最好使用/

根据评论更新

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

的操作
File.separator

虽然会在最后String fileWithoutExt = fileLocn.substring(0, fileLocn.indexOf(".")); 之后删除所有内容,包括最后.

因此,如果您的.的值为String,则会返回FQSEMI.mp4

答案 1 :(得分:1)

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

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

(请注意,在Java中,我们倾向于将变量命名为以小写字符开头的名称,以避免与类混淆。这也有助于语法高亮显示,就像在此站点上使用的那样。)