java.io.filenotfoundexception下载zip并解压缩它
我制作了一个小程序,从一个直接链接下载一个zip文件,然后在同一个目录中提取它的所有内容。 它不下载任何东西,也不解压缩。 这就是我到目前为止所做的:java.io.filenotfoundexception下载zip并解压缩它,java,download,unzip,Java,Download,Unzip,我制作了一个小程序,从一个直接链接下载一个zip文件,然后在同一个目录中提取它的所有内容。 它不下载任何东西,也不解压缩。 这就是我到目前为止所做的: package main; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import j
package main;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Main {
static String url = "https://www.dropbox.com/s/uml938guklfvo7r/Tekst.zip?dl=1";
static int lastSlashIndex = url.lastIndexOf('/');
static String filename= url.substring(lastSlashIndex + 1, url.length() - 5);
static String filepath = "C:";
private static final int BUFFER = 4096;
public static void main(String[] args) {
try{
URL website = new URL(url);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
new File(filepath + filename).createNewFile();
FileOutputStream fos = new FileOutputStream(filepath + filename);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
}catch(Exception e){ e.printStackTrace(); }
try {
unzip(filepath + filename, filepath);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void unzip(String zipFilePath, String destDirectory) throws IOException {
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
ZipEntry entry = zipIn.getNextEntry();
// iterates over entries in the zip file
while (entry != null) {
String filePath = destDirectory + File.separator + entry.getName();
if (!entry.isDirectory()) {
// if the entry is a file, extracts it
extractFile(zipIn, filePath);
} else {
// if the entry is a directory, make the directory
File dir = new File(filePath);
dir.mkdir();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
}
private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
Line 68>> BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
byte[] bytesIn = new byte[BUFFER];
int read = 0;
while ((read = zipIn.read(bytesIn)) != -1) {
bos.write(bytesIn, 0, read);
}
bos.close();
}
}
以下是错误:
java.io.FileNotFoundException: C:\Tekst.txt (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at main.Main.extractFile(Main.java:68)
at main.Main.unzip(Main.java:55)
at main.Main.main(Main.java:35)
java.io.FileNotFoundException:C:\Tekst.txt(访问被拒绝)
在java.io.FileOutputStream.open(本机方法)
位于java.io.FileOutputStream。(未知源)
位于java.io.FileOutputStream。(未知源)
位于main.main.extractFile(main.java:68)
在main.main.unzip(main.java:55)
在main.main.main(main.java:35)
显然这个文件还没有创建。您可以使用
new File(yourFilepath).createNewFile()
您需要在调用之前执行
FileOutputStream fos = new FileOutputStream(filepath + filename);
这会引发异常。然后它工作得很好。你有什么异常吗?@EelLee我编辑了我的主要帖子。所以你可以看到错误是“C:\Tekst.txt(访问被拒绝)”,你在运行哪个系统-Windows,Linux?也许你只是没有权限访问这个文件夹?请尝试在帖子中提供所有有用的信息-显示引发异常的行,告诉我们您正在使用什么操作系统,等等@EelLee line 66 is BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(filePath));我添加了OK,您是作为管理员还是其他用户登录的?尝试在Windows资源管理器中的C:\main文件夹中创建文件-您可以从那里执行吗?如果没有,你能在C:\Users[你的用户名]\中创建一个文件吗?我试图添加那段代码,但又出现了一个错误。我用我现在的代码和从中得到的错误更新了主帖it@xX4m4zingXx编辑答案后,您需要先创建文件,然后再开始对其执行任何操作;-)不,您不需要,FileOutputStream将自动创建该文件。@jtahlborn好吧,我有和作者相同的例外情况,引入了上面提到的更改,这很有效,所以。。。顺便说一句,这个问题已经被编辑了4次,在我回答之后至少编辑过一次,所以它可能不再有效。但是在回答的时候,我自己检查了同样的代码,它成功了。@EelLee你能给我你的代码吗,这样我就能知道我做错了什么?