1 场景描述
Java7读取文件属性,比如文件大小如何操作?文件或目录呢?如何遍历目录?
2 工具类
这个工具类只是将long型的字节转换为字符串显示
public class FileSizeUtil {
/**
*
* @param size 文件的字节大小
* @return
* [0,1024] *B
* (1024,1024*1024] *KB
* (1024*1024,1024*1024*1024] *MB
* (1024*1024*1024,1024*1024*1024*1024] *GB
* (1024*1024*1024*1024,1024*1024*1024*1024*1024] *TB
*
*/
public static String getSize(long size){
//格式化数字,小数点后保留两位有效数字
DecimalFormat df = new DecimalFormat("#.00");
if(size>=0 && size<=1024){
return size + "B";
}else if(size>1024 && size<= 1024*1024){
return df.format(size*1.0/1024) + "KB";
}else if(size>1024*1024 && size<= 1024*1024*1024){
return df.format(size*1.0/(1024*1024)) + "MB";
}else if(size>1024*1024*1024 && size<= 1024*1024*1024*1024){
return df.format(size*1.0/(1024*1024*1024)) + "GB";
}else if(size>1024*1024*1024*1024 && size<= 1024*1024*1024*1024*1024){
return df.format(size*1.0/(1024*1024*1024*1024)) + "TB";
}
return null;
}
}
3 测试读取文件/目录的大小
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import lombok.SneakyThrows;
import org.exo.util.FileSizeUtil;
import org.junit.Test;
public class TestFileAttribute {
/**
* 测试读取文件大小
*/
@Test
@SneakyThrows //抛出异常。lombok的注解
public void testFileAttributes(){
//在项目根目录下面查找文件
Path path = Paths.get("big-template.xlsx");
BasicFileAttributes attributes = Files.readAttributes(path, BasicFileAttributes.class);
System.out.println(FileSizeUtil.getSize(attributes.size()));
}
/**
* 测试读取目录的大小
*/
@Test
@SneakyThrows//抛出异常。lombok的注解
public void testFileDirectoryAttributes(){
//在项目根目录下面查找文件
MyFileVistor vistor = new MyFileVistor();
Files.walkFileTree(Paths.get("src"), vistor);
System.out.println(FileSizeUtil.getSize(vistor.getSize()));
}
@SuppressWarnings("hiding")
class MyFileVistor extends SimpleFileVisitor{
long size = 0L;
@Override
public FileVisitResult visitFile(Path path,BasicFileAttributes attrs) throws IOException {
size += attrs.size();
return FileVisitResult.CONTINUE;
}
public long getSize(){
return this.size;
}
}
}