file.getAbsolutePath()和file.length()返回错误的值

时间:2013-12-27 12:30:04

标签: java file jfilechooser

我有一个方法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");
            }   

        }

4 个答案:

答案 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());
}