您的位置:

Java实现获取文件大小

一、File.length()

在Java中,获取文件大小最简单的方式就是使用File类的length()方法。

import java.io.File;

public class FileSizeExample {
    public static void main(String[] args) {
        File file = new File("example.txt");
        long fileSize = file.length(); 
        System.out.println("文件大小为:" + fileSize + " bytes");
    }
}

上述代码中,首先创建了一个File对象file,它代表了名为“example.txt”的文件。然后通过调用file的length()方法获取了文件的大小,单位为字节。最后通过System.out.println()方法将文件大小输出到控制台。

需要注意的是,这种方法不适用于获取文件夹的大小。如果希望获取文件夹的大小,则需要遍历文件夹中的所有文件,并将它们的大小相加。

二、Apache Commons IO包

除了使用Java自带的File类,还可以使用第三方库Apache Commons IO简化文件操作。

import org.apache.commons.io.FileUtils;
import java.io.File;

public class FileSizeExample {
    public static void main(String[] args) {
        File file = new File("example.txt");
        long fileSize = FileUtils.sizeOf(file); 
        System.out.println("文件大小为:" + fileSize + " bytes");
    }
}

上述代码使用了Apache Commons IO的FileUtils类中的sizeOf()方法来获取文件大小,返回的结果也是文件大小,单位为字节。

需要注意的是,FileUtils类中还有很多其他有用的方法,如获取文件夹大小,复制/移动/删除文件等操作。使用Apache Commons IO可以使文件操作代码更简洁易读。

三、Channel类

另一种获取文件大小的方法是使用Java的NIO(New IO)类库。NIO提供了Channel类,可以高效地读取文件内容和文件属性。

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;

public class FileSizeExample {
    public static void main(String[] args) {
        try {
            RandomAccessFile file = new RandomAccessFile("example.txt", "r");
            FileChannel channel = file.getChannel();
            long fileSize = channel.size();
            System.out.println("文件大小为:" + fileSize + " bytes");
            channel.close();
            file.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,首先创建了一个RandomAccessFile对象file,它代表了名为“example.txt”的文件,并指定了只读模式。然后通过调用file的getChannel()方法获取了文件的Channel对象,并通过调用Channel的size()方法获取了文件大小。最后需要手动关闭Channel和RandomAccessFile。

需要注意的是,此方法同样不适用于获取文件夹的大小。

四、获取文件夹大小

如果需要获取文件夹的大小,需要遍历文件夹中的所有文件,并将它们的大小相加。

import java.io.File;

public class FolderSizeExample {
    public static void main(String[] args) {
        File folder = new File("example_folder");
        long folderSize = 0;
        if (folder.isDirectory()) {
            for (File file : folder.listFiles()) {
                folderSize += file.length();
            }
        }
        System.out.println("文件夹大小为:" + folderSize + " bytes");
    }
}

上述代码中,首先创建了一个File对象folder,它代表了名为“example_folder”的文件夹。通过调用folder的isDirectory()方法判断该File对象是否是文件夹。如果是,就遍历文件夹中的所有文件,将它们的大小相加,最后打印文件夹大小。

五、结论

本文介绍了四种获取文件大小的方法:使用File类的length()方法、使用Apache Commons IO包、使用Channel类以及获取文件夹大小的方法。每种方法都有其优点和适用场景。

使用File类的length()方法简单,适用于获取单个文件的大小;使用Apache Commons IO包简化操作,可以使用丰富的文件操作方法;使用Channel类可以高效地读取文件属性,但需要手动关闭Channel和RandomAccessFile;获取文件夹的大小需要遍历文件夹中的所有文件,不能使用File的length()方法。

根据实际情况选择合适的方法可以使代码更加简洁、高效。