0

我正在尝试在单击按钮时使用下面的代码来下载文件并将其保存到某个位置。但是,它总是返回找不到目标目的地。它似乎没有创建所需的目录。我必须告诉它这样做还是应该为我这样做?以下是我正在使用的功能:

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!");
        }
4

2 回答 2

2

您正在使用该transferFrom()方法作为单线。但是,我认为您应该检查是否有更多数据可用。从API

尝试从源通道读取 count 个字节并将它们从给定位置开始写入此通道的文件。此方法的调用可能会也可能不会传输所有请求的字节;是否这样做取决于通道的性质和状态。如果源通道剩余的字节数少于 count,或者源通道是非阻塞的并且其输入缓冲区中立即可用的字节数少于 count 个,则将传输少于请求的字节数。

发布了一个类似的问题,可能会对您有所帮助。

于 2013-06-28T08:15:00.643 回答
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---------");
于 2013-07-04T22:28:36.557 回答