Java文件对象大小返回0

时间:2018-11-24 04:48:43

标签: java file

System.out.print("1");
System.out.println(ts.getComponent());
System.out.println(ts.getTransferable().getTransferData(DataFlavor.javaFileListFlavor));
String dir = ts.getTransferable().getTransferData(DataFlavor.javaFileListFlavor).toString();

File file = new File(dir);
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getTotalSpace());

long num = file.length();
System.out.println(num);

输出

1javax.swing.JTable[,0,0,556x64,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@1baabbd6,flags=251658568,maximumSize=,minimumSize=,preferredSize=,autoCreateColumnsFromModel=true,autoResizeMode=AUTO_RESIZE_SUBSEQUENT_COLUMNS,cellSelectionEnabled=false,editingColumn=-1,editingRow=-1,gridColor=javax.swing.plaf.ColorUIResource[r=35,g=35,b=36],preferredViewportSize=java.awt.Dimension[width=450,height=400],rowHeight=16,rowMargin=0,rowSelectionAllowed=true,selectionBackground=DerivedColor(color=57,105,138 parent=nimbusSelectionBackground offsets=0.0,0.0,0.0,0 pColor=57,105,138,selectionForeground=DerivedColor(color=255,255,255 parent=nimbusLightBackground offsets=0.0,0.0,0.0,0 pColor=255,255,255,showHorizontalLines=false,showVerticalLines=false]
[C:\Users\Ye\Desktop\Spotify.lnk]
Spotify.lnk]
[C:\Users\Ye\Desktop\Spotify.lnk]
0

尽管只用很少的文件进行测试,但我仍然不知道文件大小为0

2 个答案:

答案 0 :(得分:1)

有可能您正在检查目录的长度,或者指定的File不存在。

File.length的文档中,它返回:

  

此抽象路径名表示的文件的长度(以字节为单位);如果文件不存在,则为0L。某些操作系统可能会返回0L作为路径名,这些路径名表示与系统有关的实体,例如设备或管道。

答案 1 :(得分:1)

问题似乎出在您提供给File构造函数的路径String上。值[C:\Users\Ye\Desktop\Spotify.lnk]并不是您尝试访问的文件的File构造函数的有效路径名。这在file.getName()而不是Spotify.lnk]的{​​{1}}的打印语句输出中可见。您尝试获取大小的文件对象是一个名为Spotify.lnk **] **的新文件,其大小为
我不知道除了Spotify.lnk以外,您是否还有其他方法来获取文件名,但是您可以尝试使用以下代码来清理文件名:

getTransferData(DataFlavor.javaFileListFlavor).toString()

这将对您获得的 String dirTemp = ts.getTransferable().getTransferData(DataFlavor.javaFileListFlavor).toString(); dir = dirTemp.substring(1, dirTemp.length() - 1); // Then create the file using this dir String. File file = new File(dir); 的当前输出有效,但如果有人更改了getTransferData()#toString()的实现,则可能无效。

编辑:

正如@ MichaelA.Schaffrath正确指出的,toString()返回的对象实际上是ts.getTransferable().getTransferData(DataFlavor.javaFileListFlavor)。因此,甚至不需要再次构造新的List<File>对象。只需将返回值转换为File,然后将第一个值用于List对象。