Wie erhalte ich die Größe einer Datei in MB (Megabyte)?

72

Ich habe eine Zip-Datei auf einem Server.

Wie kann ich überprüfen, ob die Datei größer als 27 MB ist?

File file = new File("U:\intranet_root\intranet\R1112B2.zip");
if (file > 27) {
   //do something
}
itro
quelle
Hier erhalten Sie lesbare Dateigrößenformatierung ... stackoverflow.com/a/5599842/2408621
DocFoster

Antworten:

162

Verwenden Sie die length()Methode der FileKlasse, um die Größe der Datei in Bytes zurückzugeben.

// 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) {
  ...
}

Sie könnten die Konvertierung in einem Schritt kombinieren, aber ich habe versucht, den Prozess vollständig zu veranschaulichen.

Marcus Adams
quelle
48

Versuchen Sie folgenden Code:

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);
Endian
quelle
40

Beispiel:

public static String getStringSizeLengthFile(long size) {

    DecimalFormat df = new DecimalFormat("0.00");

    float sizeKb = 1024.0f;
    float sizeMb = sizeKb * sizeKb;
    float sizeGb = sizeMb * sizeKb;
    float sizeTerra = sizeGb * sizeKb;


    if(size < sizeMb)
        return df.format(size / sizeKb)+ " Kb";
    else if(size < sizeGb)
        return df.format(size / sizeMb) + " Mb";
    else if(size < sizeTerra)
        return df.format(size / sizeGb) + " Gb";

    return "";
}

Nicolas
quelle
Es werden viele nicht benötigte Dinge erledigt, aber ich denke, es ist für einen Neuling einfacher zu verstehen.
Buffalo
10

file.length () gibt Ihnen die Länge in Bytes zurück, dann teilen Sie diese durch 1048576 und jetzt haben Sie Megabyte!

Luciano
quelle
3
Vielen Dank für diese Multiplikation. Dies erspart mir das Schreiben (1024 * 1024). 4 Tastenanschläge wurden gespeichert. : D
TapanHP
3

Sie können die Länge der Datei mit File # length () abrufen , wodurch ein Wert in Byte zurückgegeben wird. Sie müssen diesen also durch 1024 * 1024 teilen, um den Wert in MB zu erhalten.

Kingamajick
quelle
3

Seit Java 7 können Sie verwenden 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");
}
ROMANIA_engineer
quelle
0
public static long sizeOf(File file)

Weitere Informationen zur API: http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html

Balaji Boggaram Ramanarayan
quelle
Diese Methode gibt die Größe der Datei (oder des Verzeichnisses) in Bytes und nicht in Megabyte zurück: commons.apache.org/proper/commons-io/apidocs/org/apache/commons/… . Um die Größe in Megabyte zu erhalten, müssen Sie noch zweimal durch 1024 dividieren.
Scadge
0

Sie können Teilzeichenfolgen verwenden, um ein Portio von String zu erhalten, das 1 MB entspricht:

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);
        }
    }
Jay Smith
quelle
0

Sie können FileChannelin verwendenJava .

FileChannel verfügt über die size () -Methode, um die Größe der Datei zu bestimmen.

    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);

Sie können die Dateigröße auch mit der Apache CommonsMethode 'FileUtils' sizeOf () bestimmen . Wenn Sie maven verwenden, fügen Sie dies der pom.xmlDatei hinzu.

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

Versuchen Sie die folgende Codierung:

    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);

Diese Methoden geben die Größe in Bytes aus. Um die MB-Größe zu erhalten, müssen Sie die Dateigröße von (1024 * 1024) teilen.

Jetzt können Sie einfach die if-elseBedingungen verwenden, da die Größe in MB erfasst wird.

Dulith De Costa
quelle
0

Kotlin-Erweiterungslösung

Fügen Sie diese irgendwo hinzu und rufen if (myFile.sizeInMb > 27.0)Sie dann an oder je nachdem, was Sie brauchen:

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

Wenn Sie die Arbeit mit einem String oder Uri vereinfachen möchten, fügen Sie Folgendes hinzu:

fun Uri.asFile(): File = File(toString())

fun String?.asUri(): Uri? {
    try {
        return Uri.parse(this)
    } catch (e: Exception) {
    }
    return null
}

Wenn Sie die Werte einfach als Zeichenfolge anzeigen möchten, sind dies einfache Wrapper. Sie können die angezeigten Standard-Dezimalstellen jederzeit anpassen

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"
Gibolt
quelle
0
     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");             
        }

Hinweis: 1048576 = (1024 * 1024) = 1 MB Ausgabe: Die Dateigröße beträgt weniger als 1 MB

Ajay Patil
quelle