我一直在用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。保证赞成相关答案,我会在学分中提及你:))
答案 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中,我们倾向于将变量命名为以小写字符开头的名称,以避免与类混淆。这也有助于语法高亮显示,就像在此站点上使用的那样。)