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
答案 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
对象。