我一直在用 Java 编写一个音频/视频转换器。除了 JFileChooser 之外,一切都运行顺利。 (我通常使用 AWT FileDialog 来选择文件,但不能在这个项目中使用它,因为我听说 FileDialog 是操作系统相关的 - 请建议。)
以下是我的文件选择过程的工作原理:
我定义了一个公共(public)字符串 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.保证对相关答案投赞成票,我会在致谢名单中提及您:))
最佳答案
您将获取 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
的 String
,它将返回 FQSEMI
关于java - JFileChooser 将文件名传递为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22004233/