标签: apache-commons-io

使用Commons IO将目录压缩为zip文件

我是Java编程的初学者,目前正在编写一个必须能够压缩和解压缩.zip文件的应用程序.我可以使用以下代码使用内置的Java zip功能以及Apache Commons IO库解压缩Java中的zipfile:

public static void decompressZipfile(String file, String outputDir) throws IOException {
    if (!new File(outputDir).exists()) {
        new File(outputDir).mkdirs();
    }
    ZipFile zipFile = new ZipFile(file);
    Enumeration<? extends ZipEntry> entries = zipFile.entries();
    while (entries.hasMoreElements()) {
        ZipEntry entry = entries.nextElement();
        File entryDestination = new File(outputDir, entry.getName());
        if (entry.isDirectory()) {
            entryDestination.mkdirs();
        } else {
            InputStream in = zipFile.getInputStream(entry);
            OutputStream out = new FileOutputStream(entryDestination);
            IOUtils.copy(in, out);
            IOUtils.closeQuietly(in);
            IOUtils.closeQuietly(out);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

除了我以前使用的外部库之外,我将如何从目录创建zip文件?(Java标准库和Commons IO)

java zip apache-commons-io

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

在Java中有效地从URL读取文件到byte []

我试图找到一种更有效的方法来从远程 URL 读取文件并将其保存到字节数组中。这是我目前拥有的:

private byte[] fetchRemoteFile(String location) throws Exception {
  URL url = new URL(location);
  InputStream is = null;
  byte[] bytes = null;
  try {
    is = url.openStream ();
    bytes = IOUtils.toByteArray(is);
  } catch (IOException e) {
    //handle errors
  }
  finally {
    if (is != null) is.close();
  }
  return bytes;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我目前将 URL 传递给该方法,该方法使用 InputStream 对象读取文件的字节。此方法使用 Apache Commons IOUtils。但是,此方法调用往往需要相对较长的时间才能运行。当一个接一个地检索数百、数千或数十万个文件时,它会变得很慢。有没有办法改进这种方法,使其运行更有效?我已经考虑过多线程,但我想把它作为最后的手段。

java optimization bytearray file apache-commons-io

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

错误:javax.net.ssl.SSLException:连接重置(仅限特定网站)

善良的 Attn 版主:在将此查询标记为重复之前,请注意我已检查 - Link1Link2Link3并且无法解决该问题。我也相信上下文和错误与那些不同,因此在这里寻求帮助。

上下文:从 NSEIndia 网站下载 csv 文件到本地文件夹(注意:可以从其他随机网站下载 CSV 文件)。

问题:返回错误 - javax.net.ssl.SSLException:连接重置(完整错误粘贴在下面)

观察:我很困惑,因为我昨天遇到了同样的问题,但经过几次重试后,它奏效了。我没有更改代码或设置。

问题:有什么我可以做的,以确保在这个特定网站上看不到这个错误?

代码:

// Using FileUtils from -> import org.apache.commons.io.FileUtils;
try {
        FileUtils.copyURLToFile(new URL("https://www.nseindia.com/content/fo/fo_mktlots.csv"),new File("D:\\Download\\t1.csv"));
    } catch (IOException e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

错误:

javax.net.ssl.SSLException: Connection reset
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:127)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:324)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:262)
at java.base/sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1652)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1038)
at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:245)
at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:285)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:344)
at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:746)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:717)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1610) …
Run Code Online (Sandbox Code Playgroud)

java ssl fileutils apache-commons-io sslexception

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

IOUtils.copy 和 IOUtils.copyLarge 非常慢

我已经实现了一个 REST 服务,用于使用 IOUtils.copy() 下载一个中等大 (250 Mb) 的 zip 文件,类似于将文件写入 servletoutputstream 的最有效方法。REST 服务是使用 HttpURLConnection 从另一个应用程序调用的。我在接收端使用 IOUtils.copy() 将文件保存到磁盘。

下载一个文件需要 30 多分钟。这是这样太慢了。

想法?更好的实现?

java http inputstream apache-commons-io

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

Java 进程挂在 IOUtils 上。疑似僵局

我有一个 java 进程挂在调用中,IOUtils.toString使用以下代码:

String html = "";
try {
    html = IOUtils.toString(someUrl.openStream(), "utf-8"); // process hangs on this line
} catch (Exception e) {
    return null;
}
Run Code Online (Sandbox Code Playgroud)

它无法可靠地重现这一点。它是网络爬虫的一部分,因此成功执行了该行数千次,但最终导致该进程在几天后挂起。

jstack 的输出:

2013-09-25 09:09:36
Full thread dump OpenJDK 64-Bit Server VM (20.0-b12 mixed mode):

"Attach Listener" daemon prio=10 tid=0x00007f2b1c001000 nid=0x225a waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Thread-0" prio=10 tid=0x00007f2b34122000 nid=0x187b runnable [0x00007f2b30970000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:146)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
        - locked <0x00000000e3d2d160> (a …
Run Code Online (Sandbox Code Playgroud)

java openjdk deadlock apache-commons-io

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

Java:使用Apache commons-IO 2.4在子目录中递归列出文件

我正在尝试使用以下代码和Apache Commons-IO 2.4库列出根目录及其子目录中扩展名为".xls"的文件.我正在检查的大小collection<File>,但它给出了0.我没有看到代码中哪里可能出错.你能帮帮我吗?

public static void main(String[] args) throws IOException {

    File rootDir = new File(args[0]);

    Collection<File> files = FileUtils.listFiles(rootDir, new RegexFileFilter("[a-zA-Z].xls"), DirectoryFileFilter.DIRECTORY);

    System.out.println("collection size:" + files.size());

}
Run Code Online (Sandbox Code Playgroud)

java recursion subdirectory apache-commons-io

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

Apache Commons IO 文件监控与 JDK WatchService

我需要开发一个应用程序,一旦文件在预定义目录中创建,它将处理 csv 文件。预计会有大量传入文件。

我见过在生产中使用 Apache Commons IO 文件监控的应用程序。它工作得很好。我见过它一天处理多达 2100 万个文件。似乎 Apache Commons IO 文件监控会轮询目录并执行 listFiles 来处理文件。

我的问题:JDK WatchService 是否和 Apache Commons IO 文件监控一样好?有谁知道任何优点和缺点?

java file-processing watchservice apache-commons-io

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

我应该关闭org.apache.commons.io.IOUtils的InputStream吗?

我正在使用如何将InputStream转换为虚拟文件的答案,该文件用于org.apache.commons.io.IOUtils将给定的内容复制InputStream到a FileOutputStream以创建File.

我应该关闭InputStream给定的?

java inputstream apache-commons-io

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

为什么ReversedLinesFileReader这么慢?

我有一个21.6GB的文件,我想从头到尾阅读它,而不是像往常一样从开头到结尾.

如果我使用以下代码从头到尾读取文件的每一行,则需要1分12秒.

val startTime = System.currentTimeMillis()
File("very-large-file.xml").forEachLine {
    val i = 0
}
val diff = System.currentTimeMillis() - startTime
println(diff.timeFormat())
Run Code Online (Sandbox Code Playgroud)

现在,我已经读过要反向读取文件然后我应该使用ReversedLinesFileReaderApache Commons.我创建了以下扩展函数来做到这一点:

fun File.forEachLineFromTheEndOfFile(action: (line: String) -> Unit) {
    val reader = ReversedLinesFileReader(this, Charset.defaultCharset())
    var line = reader.readLine()
    while (line != null) {
        action.invoke(line)
        line = reader.readLine()
    }

    reader.close()
}
Run Code Online (Sandbox Code Playgroud)

然后以下面的方式调用它,这与前面的方式相同,只是调用forEachLineFromTheEndOfFile函数:

val startTime = System.currentTimeMillis()
File("very-large-file.xml").forEachLineFromTheEndOfFile {
    val i = 0
}
val diff = System.currentTimeMillis() - startTime
println(diff.timeFormat())
Run Code Online (Sandbox Code Playgroud)

这需要17分50秒才能运行!

  • ReversedLinesFileReader是以正确的方式使用的吗?
  • 我在SSD上运行带有Ext4文件系统的Linux …

java kotlin apache-commons-io

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

Maven Shade 重叠类警告

我在我的项目中使用 commons-io 并想要对其进行着色。我遇到了一个我似乎无法弄清楚的警告:

[WARNING] commons-io-2.7.jar, murder-1.0-SNAPSHOT.jar define 180 overlapping classes and resources:
...
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪,因为murder-1.0-SNAPSHOT.jar我正在尝试构建的 jar 应该包含 commons-io jar。

我这样定义我的 commons-io 依赖项:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.7</version>
    <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

(我以为我应该使用runtime范围,但后来我无法运行package,因为它抱怨FileUtils找不到)

这是我的阴影插件的配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>

    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <artifactSet>
                    <includes>
                        <include>commons-io:commons-io</include>
                    </includes>
                </artifactSet>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/MANIFEST.MF</exclude>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

如果我完全删除<filters>,我只会收到此警告:

commons-io-2.7.jar, murder-1.0-SNAPSHOT.jar define 1 overlapping resource
[WARNING]   - META-INF/MANIFEST.MF …
Run Code Online (Sandbox Code Playgroud)

java maven maven-shade-plugin apache-commons-io

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