相关疑难解决方法(0)

java有效地获取文件大小

谷歌搜索时,我发现使用java.io.File#length()可能很慢. FileChannel有一个size()方法也可用.

在java中有一种有效的方法来获取文件大小吗?

java filesize

161
推荐指数
6
解决办法
21万
查看次数

格式化文件大小为MB,GB等

我需要使用合理的单位将文件大小显示为String.

例如

1L ==> "1 B";
1024L ==> "1 KB";
2537253L ==> "2.3 MB"
Run Code Online (Sandbox Code Playgroud)

等等

我找到了之前的答案,我觉得并不令人满意

我提出了自己的解决方案,它有类似的缺点:

private static final long K = 1024;
private static final long M = K * K;
private static final long G = M * K;
private static final long T = G * K;

public static String convertToStringRepresentation(final long value){
    final long[] dividers = new long[] { T, G, M, K, 1 };
    final String[] units = new String[] …
Run Code Online (Sandbox Code Playgroud)

java string format numbers

120
推荐指数
3
解决办法
9万
查看次数

如何在Java中获取文件大小

可能重复:
文件夹或文件的大小

我用这段代码来实例化一个File对象:

File f = new File(path);
Run Code Online (Sandbox Code Playgroud)

如何获取此文件的大小?

是什么区别getUsableSpace(),getTotalSpace()getFreeSpace()

java

118
推荐指数
3
解决办法
23万
查看次数

Java 1.6 - 确定符号链接

在DirectoryWalker类中,我想知道File实例是否实际上是指向目录的符号链接(假设,walker在UNIX系统上行走).鉴于,我已经知道实例是一个目录,以下是确定符号链接的可靠条件吗?

File file;
// ...      
if (file.getAbsolutePath().equals(file.getCanonicalPath())) {
    // real directory ---> do normal stuff      
}
else {
    // possible symbolic link ---> do link stuff
}
Run Code Online (Sandbox Code Playgroud)

java java-6

42
推荐指数
4
解决办法
4万
查看次数

Files.walk(),计算总大小

我正在尝试计算光盘上文件的大小.在java-7中,这可以使用Files.walkFileTree来完成,如我在这里的回答所示.

但是,如果我想使用java-8流来执行此操作,它将适用于某些文件夹,但不适用于所有文件夹.

public static void main(String[] args) throws IOException {
    long size = Files.walk(Paths.get("c:/")).mapToLong(MyMain::count).sum();
    System.out.println("size=" + size);
}

static long count(Path path) {
    try {
        return Files.size(path);
    } catch (IOException | UncheckedIOException e) {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码适用于路径,a:/files/c:/它会抛出异常

Exception in thread "main" java.io.UncheckedIOException: java.nio.file.AccessDeniedException: c:\$Recycle.Bin\S-1-5-20
at java.nio.file.FileTreeIterator.fetchNextIfNeeded(Unknown Source)
at java.nio.file.FileTreeIterator.hasNext(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.LongPipeline.reduce(Unknown …
Run Code Online (Sandbox Code Playgroud)

java nio java-8 java-stream

21
推荐指数
3
解决办法
1万
查看次数

获取文件夹大小

你知道如何用Java获取文件夹大小吗?

File类中的length()方法仅适用于文件,使用该方法我总是得到0的大小.

java file-io

13
推荐指数
4
解决办法
2万
查看次数

在 Java 中获取文件大小的最新方法

我知道这个问题已在不同的帖子中广泛讨论:

我的问题是我需要获取大量文件(HD 中存在的常规文件)的大小,为此我需要一个提供最佳性能的解决方案。我的直觉是应该通过直接读取文件系统表的方法来完成,而不是通过读取整个文件内容来获取文件的大小。看文档很难知道具体使用了哪种方法。

本页所述

Files 有 size() 方法来确定文件的大小。这是最新的 API,推荐用于新的 Java 应用程序。

但这显然不是最好的建议,就性能而言。我对不同的方法进行了不同的测量:

  1. file.length();

  2. Files.size(path);

  3. BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class); attr.size();

令我惊讶的是,这file.length();是最快的,必须创建一个File对象而不是使用较新的Path. 如果这也读取文件系统或内容,我现在不会。所以我的问题是:

在最新的 Java 版本 (9/10/11) 中,最快的、推荐的获取文件大小的方法是什么?


编辑

我认为这些细节不会为问题增加任何内容。基本上基准是这样的:

Length: 49852  with previous instanciation: 84676
Files: 3451537 with previous instanciation: 5722015
Length: 48019 with previous instanciation:: 79910
Length: 47653 with previous instanciation:: 86875
Files: 83576 with previous instanciation: 125730
BasicFileAttr: 333571 with previous instanciation:: 366928
..... …
Run Code Online (Sandbox Code Playgroud)

java performance filesize java-11

8
推荐指数
0
解决办法
2179
查看次数

为什么java中File.length()的大小与linux du命令的大小不同

1>对于一个空目录,linux命令du将显示0大小,这意味着它不使用磁盘空间.对?但java中的File.length()不会显示为零,而是显示空目录使用了一些字节.

如果确实Unix中的所有内容都是文件并且占用磁盘空间,那么Java就在这里,为什么du显示其0块.

如果它应该是0块,那么为什么Java显示空目录使用的一些字节?

$ mkdir empty_directory
$ du -h empty_directory/
  0B    empty_directory/
$ du  empty_directory
  0     empty_directory


File f = new File("/test/empty_directory");
if (f.exists() && f.isDirectory()) {
    System.out.println(f.length());
}

68
Run Code Online (Sandbox Code Playgroud)

2>对于相同的无空文件,linux命令du显示的大小仍然与java中的File.length()大小不同.
原因只来自差异单位:du使用的块和File.length()使用的字节?

$ du -h oneline.txt 
4.0K    oneline.txt
$ du   oneline.txt 
8    oneline.txt
$ ls -s oneline.txt
8    oneline.txt
Run Code Online (Sandbox Code Playgroud)

-s显示每个文件实际使用的文件系统块数,以512字节为单位,其中部分单位向上舍入为下一个整数值.如果输出到终端,则在列出之前的行上输出所有文件大小的总和.环境变量BLOCKSIZE会覆盖512字节的单位大小.

File f = new File("/test/oneline.txt");
if (f.exists() && f.isFile()) {
    System.out.println(f.length());
}

26
Run Code Online (Sandbox Code Playgroud)

困惑.请你帮个忙吗?

java

1
推荐指数
1
解决办法
1476
查看次数

Kotlin 递归获取文件夹的大小

我已经看到如何在 Java 中返回文件夹的大小获取文件夹或文件的大小,但我在 Kotlin 中找不到它。

如何在 Kotlin 中获取文件夹的大小?

directory size file kotlin

0
推荐指数
1
解决办法
495
查看次数

如何在Android中获取KB和MB的文件大小

我想要可以获取文件大小并将其更改为KB和MB的代码

562 KB  =  562 KB
1024 KB =    1 MB
2152 KB = 2.15 MB
Run Code Online (Sandbox Code Playgroud)

先感谢您。

java android

-4
推荐指数
1
解决办法
1万
查看次数