Как получить размер файла в мб?
У меня есть файл на сервере, и это zip-файл. Как проверить размер файла больше 27 МБ?
File file = new File("U:\intranet_root\intranet\R1112B2.zip");
if (file > 27) {
//do something
}
13 ответов
Использовать length()
метод File
класс для возврата размера файла в байтах.
// Get file from file name
File file = new File("U:\intranet_root\intranet\R1112B2.zip");
// Get length of file in bytes
long fileSizeInBytes = file.length();
// Convert the bytes to Kilobytes (1 KB = 1024 Bytes)
long fileSizeInKB = fileSizeInBytes / 1024;
// Convert the KB to MegaBytes (1 MB = 1024 KBytes)
long fileSizeInMB = fileSizeInKB / 1024;
if (fileSizeInMB > 27) {
...
}
Вы можете объединить преобразование в один шаг, но я попытался полностью проиллюстрировать этот процесс.
Попробуйте следующий код:
File file = new File("infilename");
// Get the number of bytes in the file
long sizeInBytes = file.length();
//transform in MB
long sizeInMb = sizeInBytes / (1024 * 1024);
Пример:
public static String getStringSizeLengthFile(long size) {
DecimalFormat df = new DecimalFormat("0.00");
float sizeKb = 1024.0f;
float sizeMo = sizeKb * sizeKb;
float sizeGo = sizeMo * sizeKb;
float sizeTerra = sizeGo * sizeKb;
if(size < sizeMo)
return df.format(size / sizeKb)+ " Kb";
else if(size < sizeGo)
return df.format(size / sizeMo) + " Mo";
else if(size < sizeTerra)
return df.format(size / sizeGo) + " Go";
return "";
}
Проще всего использовать FileUtils из Apache commons-io. ( https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html)
Возвращает читаемый человеком размер файла от байтов до эксабайт с округлением до границы.
File fileObj = new File(filePathString);
String fileSizeReadable = FileUtils.byteCountToDisplaySize(fileObj.length());
// output will be like 56 MB
file.length() вернет вам длину в байтах, затем вы разделите ее на 1048576, и теперь у вас есть мегабайты!
Вы можете сделать что-то вроде этого:
public static String getSizeLabel(Integer size) {
String cnt_size = "0";
double size_kb = size / 1024;
double size_mb = size_kb / 1024;
double size_gb = size_mb / 1024;
if (Math.floor(size_gb) > 0) {
try {
String[] snplit = String.valueOf((size_gb)).split("\\.");
cnt_size = snplit[0] + "." + snplit[1].substring(0, 2) + "GB";
} catch (Exception e) {
cnt_size = String.valueOf(Math.round(size_gb)) + "GB";
}
} else if (Math.floor(size_mb) > 0) {
try {
String[] snplit = String.valueOf((size_mb)).split("\\.");
cnt_size = snplit[0] + "." + snplit[1].substring(0, 2) + "MB";
} catch (Exception e) {
cnt_size = String.valueOf(Math.round(size_mb)) + "MB";
}
} else {
cnt_size = String.valueOf(Math.round(size_kb)) + "KB";
}
return cnt_size;
}
Как использовать:
Integer filesize = new File("path").length();
getSizeLabel(filesize) // Output 16.02MB
Вы можете получить длину файла с помощью функции File # length (), которая будет возвращать значение в байтах, поэтому вам нужно разделить его на 1024*1024, чтобы получить его значение в мегабайтах.
Начиная с Java 7 вы можете использовать java.nio.file.Files.size(Path p)
,
Path path = Paths.get("C:\\1.txt");
long expectedSizeInMB = 27;
long expectedSizeInBytes = 1024 * 1024 * expectedSizeInMB;
long sizeInBytes = -1;
try {
sizeInBytes = Files.size(path);
} catch (IOException e) {
System.err.println("Cannot get the size - " + e);
return;
}
if (sizeInBytes > expectedSizeInBytes) {
System.out.println("Bigger than " + expectedSizeInMB + " MB");
} else {
System.out.println("Not bigger than " + expectedSizeInMB + " MB");
}
Kotlin Extension Solution
Добавьте их где-нибудь, затем позвоните if (myFile.sizeInMb > 27.0)
или что вам нужно:
val File.size get() = if (!exists()) 0.0 else length().toDouble()
val File.sizeInKb get() = size / 1024
val File.sizeInMb get() = sizeInKb / 1024
val File.sizeInGb get() = sizeInMb / 1024
val File.sizeInTb get() = sizeInGb / 1024
Если вы хотите упростить работу со String или Uri, попробуйте добавить их:
fun Uri.asFile(): File = File(toString())
fun String?.asUri(): Uri? {
try {
return Uri.parse(this)
} catch (e: Exception) {
}
return null
}
Если вы хотите легко отображать значения в виде строки, это простые оболочки. Не стесняйтесь настраивать отображаемые десятичные знаки по умолчанию
fun File.sizeStr(): String = size.toString()
fun File.sizeStrInKb(decimals: Int = 0): String = "%.${decimals}f".format(sizeInKb)
fun File.sizeStrInMb(decimals: Int = 0): String = "%.${decimals}f".format(sizeInMb)
fun File.sizeStrInGb(decimals: Int = 0): String = "%.${decimals}f".format(sizeInGb)
fun File.sizeStrWithBytes(): String = sizeStr() + "b"
fun File.sizeStrWithKb(decimals: Int = 0): String = sizeStrInKb(decimals) + "Kb"
fun File.sizeStrWithMb(decimals: Int = 0): String = sizeStrInMb(decimals) + "Mb"
fun File.sizeStrWithGb(decimals: Int = 0): String = sizeStrInGb(decimals) + "Gb"
Вы можете использовать FileChannel
в Java
.
FileChannel имеет метод size() для определения размера файла.
String fileName = "D://words.txt";
Path filePath = Paths.get(fileName);
FileChannel fileChannel = FileChannel.open(filePath);
long fileSize = fileChannel.size();
System.out.format("The size of the file: %d bytes", fileSize);
Или вы можете определить размер файла, используя Apache Commons
Метод sizeOf() FileUtils. Если вы используете maven, добавьте это вpom.xml
файл.
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
Попробуйте следующую кодировку,
String fileName = "D://words.txt";
File f = new File(fileName);
long fileSize = FileUtils.sizeOf(f);
System.out.format("The size of the file: %d bytes", fileSize);
Эти методы выводят размер в байтах. Итак, чтобы получить размер МБ, вам нужно разделить размер файла на (1024*1024).
Теперь вы можете просто использовать if-else
условия, так как размер фиксируется в МБ.
Вы можете использовать подстроку, чтобы получить порцию String, которая равна 1 МБ:
public static void main(String[] args) {
// Get length of String in bytes
String string = "long string";
long sizeInBytes = string.getBytes().length;
int oneMb=1024*1024;
if (sizeInBytes>oneMb) {
String string1Mb=string.substring(0, oneMb);
}
}
String FILE_NAME = "C:\\Ajay\\TEST\\data_996KB.json";
File file = new File(FILE_NAME);
if((file.length()) <= (1048576)) {
System.out.println("file size is less than 1 mb");
}else {
System.out.println("file size is More than 1 mb");
}
Примечание: 1048576= (1024*1024)=1 МБ вывод: размер файла меньше 1 МБ
public static long sizeOf(File file)
Подробнее об API: http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html