Java JFileChooser将文件名传递为null

Java JFileChooser将文件名传递为null,java,string,swing,file,jfilechooser,Java,String,Swing,File,Jfilechooser,我一直在用Java编写一个音频/视频转换器。除了JFileChooser之外,其他一切都运行顺利。(我通常使用AWT FileDialog来选择文件,但在这个项目中不能使用它,因为我听说FileDialog依赖于操作系统,请告知。) 以下是我的文件选择过程的工作原理: 我已经定义了一个公共字符串fileLocn。fileLocn将包含所选文件的位置 我的程序使用Swing。有一个JButton将打开JFIleChooser,称为FilePicker。下面是FilePicker的代码,如下所示:

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

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

  • 我已经定义了一个公共字符串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);
    }
    
  • 文件选择器选择文件并将其位置提供给字符串fileLocn,该字符串用作另一个文件的位置。请注意,filelocation文本字段是装饰性的,未在主代码中使用

这就是问题所在。getCurrentDirectory()命令工作正常,但getName()命令以null形式传递。因此,如果我在C:drive的“Videos”文件夹中选择一个文件FQSEMI.mp4,它将显示为C:\Videos\null,而不是所需的C:\Videos\FQSEMI

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


(顺便说一句,保证对相关答案进行投票,我会在积分中提到你:)

你得到的是
JFileChooser
name
属性,而不是选中的文件

而不是

fileLocn=FilePicker.getCurrentDirectory().toString()+"\\"+FilePicker.getName()
你会发现

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

根据评论更新

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

String fileWithoutExt = fileLocn.substring(0, fileLocn.indexOf("."));
While将去掉最后一个
之后的所有内容,包括最后一个


因此,如果您有一个值为
FQSEMI.mp4
字符串
,它将返回
FQSEMI

,您将获得
JFileChooser
名称
属性,而不是所选的文件

而不是

fileLocn=FilePicker.getCurrentDirectory().toString()+"\\"+FilePicker.getName()
你会发现

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

根据评论更新

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

String fileWithoutExt = fileLocn.substring(0, fileLocn.indexOf("."));
While将去掉最后一个
之后的所有内容,包括最后一个


因此,如果您有一个值为
FQSEMI.mp4
字符串
,它将返回
FQSEMI

,您将获得
JFileChooser
名称
属性,而不是所选的文件

而不是

fileLocn=FilePicker.getCurrentDirectory().toString()+"\\"+FilePicker.getName()
你会发现

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

根据评论更新

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

String fileWithoutExt = fileLocn.substring(0, fileLocn.indexOf("."));
While将去掉最后一个
之后的所有内容,包括最后一个


因此,如果您有一个值为
FQSEMI.mp4
字符串
,它将返回
FQSEMI

,您将获得
JFileChooser
名称
属性,而不是所选的文件

而不是

fileLocn=FilePicker.getCurrentDirectory().toString()+"\\"+FilePicker.getName()
你会发现

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

根据评论更新

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

String fileWithoutExt = fileLocn.substring(0, fileLocn.indexOf("."));
While将去掉最后一个
之后的所有内容,包括最后一个


因此,如果您有一个值为
FQSEMI.mp4
字符串
,当您检索
JFileChooser
对象本身时,它将返回
FQSEMI

。相反,您需要选定文件的名称。要获取此信息,请调用
filePicker.getSelectedFile().getName()
。更好的方法是获取文件的路径,而不是通过连接字符串来构造路径:

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

(注意,在Java中,我们倾向于以小写字符开始命名变量,以避免与类混淆。这也将有助于语法高亮显示,如本网站上使用的高亮显示。)

当您都
filePicker.getName()
时,您将检索
JFileChooser
对象本身的名称。相反,您需要选定文件的名称。要获取此信息,请调用
filePicker.getSelectedFile().getName()
。更好的方法是获取文件的路径,而不是通过连接字符串来构造路径:

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

(请注意,在Java中,我们倾向于以小写字符开头命名变量,以避免与类混淆。这也有助于语法高亮显示,如本网站上使用的高亮显示。)

当您都
filePicker.getName()
时,您将检索