获取文件大小方法:
1、file.length()方法,类型long Byte。支持大文件(9223372036854775807),文件大小不准。
2、fileInputStream.available()方法,类型int,最大(1.99GB),大文件返回0。文件大小准确
3、java.nio.*下的FileChannel,支持大文件,文件大小准确。
建议使用java.nio.*的FileChannel
或者:
建议1.99G内的文件使用fileInputStream.available()
无法预知多大文件的使用file.length()
1.FileChannel
public static long getFileSize(String filePath){
FileChannel fc= null;
long fileSize = 0;
try {
File f= new File(filePath);
if (f.exists() && f.isFile()){
FileInputStream fis= new FileInputStream(f);
fc= fis.getChannel();
fileSize = fc.size();
}else{
Log.e("getFileSize","file doesn't exist or is not a file");
}
} catch (FileNotFoundException e) {
Log.e("getFileSize",e.getMessage());
} catch (IOException e) {
Log.e("getFileSize",e.getMessage());
} finally {
if (null!=fc){
try{
fc.close();
}catch(IOException e){
Log.e("getFileSize",e.getMessage());
}
}
}
return fileSize;
}
2.file.length()
public static long getFileLength(String filePath){
long fileSize = 0;
File f= new File(filePath);
if (f.exists() && f.isFile()){
fileSize = f.length();
}else{
Log.e("getFileSize","file doesn't exist or is not a file");
}
return fileSize;
}
3.fileInputStream.available()
public static void main(String[] args) {
FileInputStream fis= null;
try{
File f= new File("D:\\CentOS-6.5-x86_64-bin-DVD1.iso");
fis= new FileInputStream(f);
logger.info(fis.available());
}catch(Exception e){
logger.error(e);
} finally{
if (null!=fis){
try {
fis.close();
} catch (IOException e) {
logger.error(e);
}
}
}
}
4.通过URi 获取文件大小
public static int getFileSize(Context context, Uri filePath){
int fileSize = 0;
try {
InputStream input = context.getContentResolver().openInputStream(filePath);
fileSize = input.available();
} catch ( IOException e) {
e.printStackTrace();
}
return fileSize;
}
作者:cain07
链接:https://www.jianshu.com/p/5a04cc46bfc8
来源:简书