我有一个方法fileUpload(),它打开一个FileChooser-Menu。如果我选择一个文件,那么绝对路径和文件大小写在控制台上。 首先,我只尝试使用:
System.out.println(file.getAbsolutePath()); // Print: C:\Users\Anonym XY\Desktop\test.txt\C:\Users\Anonym XY\Desktop\test.txt
System.out.println(file.length()); // Print: "0"
但是对于绝对路径,我得到绝对路径但是双重打印?! O.o 而对于filesize我到这里0,这是假大小。
如果我这样:
System.out.println(fileChooser.getSelectedFile().length()); // Print: "15747840"
然后我得到了正确的文件大小。
我的整个方法:
public void fileUpload() {
JFileChooser fileChooser = new JFileChooser();
if(fileChooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION) {
File file = new File(fileChooser.getSelectedFile() ,fileChooser.getSelectedFile().getAbsolutePath());
System.out.println("Path: " + file.getAbsolutePath()); // Print: "Path: C:\Users\Anonym XY\Desktop\test.txt\C:\Users\Anonym XY\Desktop\test.txt"
System.out.println("Filesize: " + fileChooser.getSelectedFile().length()); // Print: "Filesize: 15747840"
System.out.println("Filesize: " + file.length()); // Print: "Filesize: 0"
}else if(fileChooser.showOpenDialog(null)==JFileChooser.ERROR_OPTION) {
System.out.println("Error");
}
}
答案 0 :(得分:5)
错误在这一行:
File file = new File(fileChooser.getSelectedFile(), fileChooser.getSelectedFile().getAbsolutePath());
它本质上是做什么的:它将选定文件与自身结合起来:作为父项和子项,所以你得到路径“加倍”。
以下解决了这个问题:
File file = fileChooser.getSelectedFile();
答案 1 :(得分:3)
我认为这里的问题是你的文件创建。
File file = new File(fileChooser.getSelectedFile() ,fileChooser.getSelectedFile().getAbsolutePath());
所以如果你只是做
而不是上面一行 File file = fileChooser.getSelectedFile()
请注意,我没有尝试这个,但为什么要创建2个文件对象?如果您这样做是为了检查/学习目的,那么使用
File file = new File(fileChooser.getSelectedFile().getAbsolutePath());
答案 2 :(得分:2)
你的问题:
new File(fileChooser.getSelectedFile() ,fileChooser.getSelectedFile().getAbsolutePath());
这将从父抽象路径名和子路径名字符串创建一个新的File实例。
http://docs.oracle.com/javase/7/docs/api/java/io/File.html#File(java.io.File,java.lang.String)
新文件的大小为零,其路径是通过附加“父”和“子”路径的路径获得的。
答案 3 :(得分:1)
试试这个: 文件选择器返回一个文件,无需创建新文件。
JFileChooser chooser = new JFileChooser();
int showOpenDialog = chooser.showOpenDialog(null);
if (showOpenDialog == JFileChooser.APPROVE_OPTION) {
File f = chooser.getSelectedFile();
System.out.println("path: " + f.getAbsolutePath());
System.out.println("File size: " + f.length());
}