Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javaservlet下载文件_Java_File_Download_Fileutils - Fatal编程技术网

Javaservlet下载文件

Javaservlet下载文件,java,file,download,fileutils,Java,File,Download,Fileutils,我有两个文件,servlet: package com.servlets; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.ht

我有两个文件,servlet:

package com.servlets;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;

import com.java.DataDownloader;

/**
 * Servlet implementation class downloaderServ
 */
public class DownloaderServ extends HttpServlet {
    private static final long serialVersionUID = 1L;
    DataDownloader dl;
/**
 * @see HttpServlet#HttpServlet()
 */
public DownloaderServ() {
    super();
    dl = new DataDownloader();
    // TODO Auto-generated constructor stub
}

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            dl.download();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
    }
}

进行处理的应用程序:

package com.java;
import java.io.*;
import java.net.*;
import org.apache.commons.io.*;

public class DataDownloader {

private static boolean get(String address, String fileName) {
    try {
            URL url = new URL(address);
            File f = new File(fileName);
            FileUtils.copyURLToFile(url, f);
    }
    catch(MalformedURLException e) {
            System.out.println(e);
            return false;
    }
    catch(IOException e) {
            System.out.println(e);
            return false;
    }

    return true;
}

public boolean download() {

    String[][] urls = new String[3][2];

    urls[0][0] = "http://data.london.gov.uk/datafiles/crime-community-safety/mps-recordedcrime-borough.csv";
    urls[0][1] = "crimes.csv";
    urls[1][0] = "http://data.london.gov.uk/datafiles/housing/average-house-prices-borough.xls";
    urls[1][1] = "prices.xls";
    urls[2][0] = "http://data.london.gov.uk/datastorefiles/datafiles/demographics/gla_2012rnd_SHLAA_based_borough_projections.xls";
    urls[2][1] = "population.xls";

    for (int i = 0; i < 3; i++) {
            if (get(urls[i][0], urls[i][1]) == false) {
                    System.out.println(false);
                    return false;
            }
    }
    return true;
}
package com.java;
导入java.io.*;
导入java.net。*;
导入org.apache.commons.io.*;
公共类数据下载程序{
私有静态布尔get(字符串地址、字符串文件名){
试一试{
URL=新的URL(地址);
文件f=新文件(文件名);
copyUrltFile(url,f);
}
捕获(格式错误){
系统输出打印ln(e);
返回false;
}
捕获(IOE异常){
系统输出打印ln(e);
返回false;
}
返回true;
}
公共布尔下载(){
字符串[][]URL=新字符串[3][2];
URL[0][0]=”http://data.london.gov.uk/datafiles/crime-community-safety/mps-recordedcrime-borough.csv";
URL[0][1]=“crimes.csv”;
URL[1][0]=”http://data.london.gov.uk/datafiles/housing/average-house-prices-borough.xls";
URL[1][1]=“prices.xls”;
URL[2][0]=”http://data.london.gov.uk/datastorefiles/datafiles/demographics/gla_2012rnd_SHLAA_based_borough_projections.xls";
URL[2][1]=“population.xls”;
对于(int i=0;i<3;i++){
if(get(url[i][0],url[i][1])==false){
System.out.println(假);
返回false;
}
}
返回true;
}
}


我可以运行它没有问题,但似乎没有任何文件下载。我还打印了返回值(true或false),它确实打印了true。下载文件不是这么简单吗?

代码看起来很好,所以如果打印的是true,并且在运行程序时也没有看到任何异常,那么您的问题是无法找到从url复制的文件


由于目标
文件
中未指定目录,因此它必须将您的文件转储到调用
java
程序的文件夹中。如果运行程序的是IDE(Eclipse)等,请刷新并检查关联的项目文件夹。

Kevin,因为您显然没有遇到任何异常,我建议您:请右键单击Eclipse项目根文件夹,然后单击:刷新。您的文件将直接位于该路径

另外,我将从您的问题中删除servlet标记,因为这个问题与servlet完全无关。只是您在servlet中使用它们,但同样的代码可以独立工作,甚至在JavaEE之外


我改为添加了fileutils。

我更改了它,因此采用了绝对路径,例如

File f = new File("C:\\data\\" + fileName);

这很有效。在servlet中使用它是否会改变它,从而需要一个绝对路径,并导致相对路径不可用?我在servlet外部测试了下载部分,它使用相对路径工作,或者如果没有指定任何内容,它只下载到项目文件夹中。

您希望这段代码具体做什么?您希望它将这三个文件下载到客户端计算机上吗?不,这些文件将下载到服务器上。我尝试了,但没有文件。网络活动确实表明文件正在下载,但看不到它们。请尝试使用绝对路径,而不是仅指定文件名。我尝试过,但没有文件。网络活动确实表明文件正在下载,但看不见。通过调用
java
命令或通过某个IDE,您是如何运行此程序的?可能是的,当我有时间时,我会亲自尝试并查看。原因可能是,当您通过servlet这样的web组件运行代码时,调用由web容器管理,因此它根据其与上下文根的关系解释路径,而不是基于绝对文件系统路径。