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

use*_*184 0 java jfilechooser file

我有一个方法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"
Run Code Online (Sandbox Code Playgroud)

但是对于绝对路径,我得到绝对路径,但双重打印?!Oo和文件大小我到这里0,这是假大小.

如果我这样:

 System.out.println(fileChooser.getSelectedFile().length());  // Print: "15747840"
Run Code Online (Sandbox Code Playgroud)

然后我得到正确的文件大小.

我的整个方法:

        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");
            }   

        }
Run Code Online (Sandbox Code Playgroud)

akh*_*khl 5

错误在这一行:

File file = new File(fileChooser.getSelectedFile(), fileChooser.getSelectedFile().getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

它本质上是做什么的:它将选定文件与它自身结合起来:作为父项和子项,所以你得到路径"加倍".

以下解决了这个问题:

File file = fileChooser.getSelectedFile();
Run Code Online (Sandbox Code Playgroud)