Java文件对象大小返回0

问题描述 投票:0回答:2
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

尽管使用少量文件进行测试,我仍然不知道文件大小是多少

java file
2个回答
1
投票

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

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

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


1
投票

问题似乎与你提供给File构造函数的路径字符串有关。值[C:\Users\Ye\Desktop\Spotify.lnk]不是您尝试访问的文件的File构造函数的有效路径名。这在file.getName()的print语句输出中是可见的,Spotify.lnk]Spotify.lnk而不是getTransferData(DataFlavor.javaFileListFlavor).toString()。您尝试获取大小的文件对象是名为Spotify.lnk的新文件**] **,其大小为0。 我不知道你是否有任何其他方法来获取 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()

这对于你正在获得的toString()的当前输出是有效的,但是如果有人改变了ts.getTransferable().getTransferData(DataFlavor.javaFileListFlavor)实现,则可能不起作用。

编辑:

正如@ MichaelA.Schaffrath正确指出的那样,List<File>返回的对象实际上是一个File。因此,甚至不需要再次构建新的List对象。只需将返回的值转换为File并使用qazxswpoi对象的第一个值。

© www.soinside.com 2019 - 2024. All rights reserved.