Java.io.File.length()返回0
我正在做一个ftp文件传输的小程序,我需要知道本地文件的大小(下载简历)。问题是File.length()返回0 该文件存在(使用file.exists()进行检查),并且超过0个字节(至少在Windows中) 我不知道在哪里可以找到更详细的信息,以了解length()返回0的原因 下面是部分代码和结果Java.io.File.length()返回0,java,file,Java,File,我正在做一个ftp文件传输的小程序,我需要知道本地文件的大小(下载简历)。问题是File.length()返回0 该文件存在(使用file.exists()进行检查),并且超过0个字节(至少在Windows中) 我不知道在哪里可以找到更详细的信息,以了解length()返回0的原因 下面是部分代码和结果 long fileOffset = 0; if(localfile.exists()){ fileOffset = localfile.length(); System.out
long fileOffset = 0;
if(localfile.exists()){
fileOffset = localfile.length();
System.out.println("The file " + localfile.getAbsolutePath() + " has " + localfile.length() +" in size");
System.out.println("Resume at: " + fileOffset);
outputStream.skip(fileOffset);
ftp.setRestartOffset(fileOffset);
count = fileOffset;
}
控制台中的结果是:
The file D:\test\About Downloads.pdf has 0 in size
Resume at: 0
谢谢变量“outputStream”的存在表明,此时,您可能已经打开了文件进行写入,并且在这个过程中,您已经截断了它。在实际打开文件之前,请尝试计算大小?在该代码中,我看不出为什么它应该返回0(如果它不是空的),您是否在其他地方使用该文件
如果您在其他地方打开了文件,或者在刷新写入程序之前正在写入文件并调用长度(可能是Java或其他地方),那么它可能返回0。如果在检查文件长度之前关闭并刷新该文件的所有写入程序,则可能会得到不同的结果。您可能根本没有足够的权限访问该文件
%JRE\u HOME%/lib/security/Java.policy
,尝试添加
permission java.io.FilePermission“”“读、写”代码>
此抽象路径名表示的文件长度(以字节为单位),如果文件不存在,则为
0L
某些操作系统可能会返回0L
,用于表示设备或管道等系统相关实体的路径名。您应该使用:
File File=新文件(uri.getPath())
而不是
File File=新文件(uri.toString()) 有时操作系统在准确返回文件大小方面会出现问题,即使文件非常稳定。我采用了双重方法,在文件失败时使用File和NIO
if(discoveredFileLength==0){
最终路径discoveredFilePath=Path.get(discoveredFile.getAbsolutePath());
FileChannel discoveredFileChannel=null;
试一试{
discoveredFileChannel=FileChannel.open(discoveredFilePath);
discoveredFileLength=discoveredFileChannel.size();
}
捕获(IOE2异常){
}
}
if(discoveredFileLength)如果您将文件重命名为不带空格的文件会怎么样?人们只是因为这个原因否决了我!否决的不是我,但我看不出文件名中的空格会如何改变结果?如果文件因为权限而无法访问,那么它会抛出SecurityException:如果是这种情况,那么()方法首先会失败。这就是问题所在,因为我是从上载类重写这个类的,所以我仍然使用它来初始化流:BufferedOutputStream fileStream=new BufferedOutputStream(new FileOutputStream(localfile.getAbsoluteFile());我已经更改了它,现在正在使用RandomAccessFile。谢谢帮助!:)
long discoveredFileLength = discoveredFile.length();
if (discoveredFileLength == 0) {
final Path discoveredFilePath = Paths.get(discoveredFile.getAbsolutePath());
FileChannel discoveredFileChannel = null;
try {
discoveredFileChannel = FileChannel.open(discoveredFilePath);
discoveredFileLength = discoveredFileChannel.size();
}
catch (IOException e2) {
}
}
if (discoveredFileLength <= 0) {
logErrors(discoveredFile.getName() + " " + discoveredFileLength + " COULD NOT BE PROCESSED (length <= 0)");
_reporter.increaseFilesFailed();
return;
}