我正在尝试使用下面的代码点击按钮下载文件并将其保存到某个位置。但是,它始终返回无法找到目标目标。它似乎没有创建所需的目录。我必须告诉它这样做还是应该为我做?以下是我正在使用的功能:
public void actionPerformed(ActionEvent ae) {
try {
//ProgressBar/Install
System.out.println("FILELOCATION:\n----------");
System.out.println(filelocation.getText());
String URL_LOCATION = "http://www.futureretrogaming.tk/gamefiles/ProfessorPhys.iso";
String LOCAL_FILE = (filelocation.getText() + "\\ProfessorPhys\\");
System.out.println("LOCALFILE:\n-------");
System.out.println(LOCAL_FILE);
URL website = new URL(URL_LOCATION);
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(LOCAL_FILE+"\\ProfessorPhys.iso\\");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
System.out.println("--------\nDone Downloading\n---------");
} catch (Exception e) {
System.out.println(e);
}
编辑:
如果我手动创建它下载的目录(有点)。无论如何都要检查目录是否已存在以及是否不创建目录?此外,当它下载时,它只是使文件不下载它,因为显示的下载文件是0字节。我该如何解决这个问题?
修改
我创建了以下代码来检查目录是否存在,如果不存在,则创建它。但这确实有效,唯一仍然无效的是下载。我现在已经在标题中包含了这个问题。
对于任何想要有效代码的人,请访问:
String LOCAL_FILE = (filelocation.getText() + "\\ProfessorPhys\\");
File localfile = new File(LOCAL_FILE);
if (localfile.exists()) {
System.out.println("Directory exists!");
}
else {
System.out.println("Directory doesn't exist! Creating...");
localfile.mkdir();
if (localfile.exists())
System.out.println("Directory created!");
}
答案 0 :(得分:2)
您使用transferFrom()
方法作为一行。但是,我认为您应该检查是否有更多数据可用。来自API:
尝试从源通道读取计数字节,并将它们从给定位置开始写入此通道的文件。调用此方法可能会也可能不会传输所有请求的字节;是否这样做取决于渠道的性质和状态。如果源通道剩余的字节数少于计数字节,或者源通道非阻塞且输入缓冲区中可立即使用的字节数少于计数字节,则将传输少于请求的字节数。
类似的问题posted也可以帮助你。
答案 1 :(得分:0)
此代码对我有用:
//ProgressBar/Install
System.out.println("FILELOCATION:\n----------");
System.out.println(flocation);
String URL_LOCATION = "http://www.futureretrogaming.tk/gamefiles/ProfessorPhys.iso";
String LOCAL_FILE = (flocation + "\\ProfessorPhys\\");
File localfile = new File(LOCAL_FILE);
if (localfile.exists()) {
System.out.println("Directory exists!");
}
else {
System.out.println("Directory doesn't exist! Creating...");
localfile.mkdir();
if (localfile.exists())
System.out.println("Directory created!");
}
System.out.println("LOCALFILE:\n-------");
System.out.println(LOCAL_FILE);
URL website = new URL(URL_LOCATION);
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(LOCAL_FILE+"\\ProfessorPhys.iso\\");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
System.out.println("--------\nDone Downloading\n---------");