java.io.file对象中获取文件长度时 调用length方法 返回的是文件占用空间大小.如何获取文件自身的大小呢?
import java.io.File;
class DirDemo05{
public static void main(String[] args){
File src=new File("D:/Desktop/test/Stream");
printCount(src);
System.out.println(count);
}
public static int count=0;
public static void printCount(File src){
//获取大小
if(null!=src && src.exists()){//递归头
if(src.isFile()){
count+=src.length();
}else{
for(File s:src.listFiles()){
printCount(s);
}
}
}
}
}
FileInputStream fis = new FileInputStream(f);
System.out.println(fis.available()); //结果即是文件自身占用空间大小追问
我需要的是文件自身的大小而不是文件占用空间的大小
是图片类型的文件你可以测试下的
追答图片类型的占用空间大小是按照像素来算的,但是length方法会把他当做一个普通文件来算,然后计算它的字节数吧。
追问如果我是想获取这个文件自身的大小 而不是获取这个文件的占用空间大小该如何获取呢?
追答按照我的理解,一般是图片显示的都是占用空间的大小,但是使用length得出的就是文件自身的大小,如果图片比较小的话,会不容易比较的出来,如果图片像素特别高,那么应该是有明显的不同的,你可以试一下~
追问我需要从两个不同的地方获取文件大小比对,一个是post提交过来的一个直接读取服务器上的,post提交过来的file获得的大小为文件自身大小.而读取服务器上文件的大小为占用空间大小 所以会有这么个问题
追答如果是这种状况的话,会不会按照文本文件来处理是不是会好一点呢,不要当做图片来处理
追问?????
追答因为感觉是我的知识极限了,我实在不知道为啥用length得出来的不是文件大小,因为length是会按照文本文件来处理的方法,你改下后缀名试一下(纯属猜的),或者实在不行你可以使用文件流,把里边的文件一个字节一个字节的读出来,顺便计算一下字节数,看能不能满足要求。然后上传的时候,你用同样的方法处理一下。图片通过大小来判断是否一样还是不太靠谱的,从特征上来看会好一点~
追问如果在处理一个稍微大点的文件,这样的话效率会降低很多吧
追答确实是的,但是从目前我掌握的技术来看,我解释不了这种现象,所以只能依靠这种方法了。
本回答被提问者采纳FileInputStream fis = new FileInputStream(f);
long s= fis.available();追问
如上代码执行后获取的s值为占用空间大小 不是文件自身的大小