文件下载 FileInputStream不能读取中文路径的问题

昨天在做文件下载的时候在java文件中对下载流进行处理,但是当路径中出现中文路径是,直接抛出异常,下面是java文件下载代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

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

public class DownloadUtil {
	public static void down(HttpServletRequest request, HttpServletResponse response
			,String filename,String filepath) throws Exception{
	 	
		//response.setContentType("application/x-msdownload");
		response.setContentType(" application/x-xls;charset=uft-8");
		response.setContentType("application/octet-stream");
	 	response.setHeader("Content-disposition","attachment; filename=" + new String(filename.getBytes("utf-8"),"iso8859-1")); 
		
	 	java.io.FileInputStream in = null;     
	 	java.io.BufferedInputStream binpu = null;  
	 	java.io.BufferedOutputStream bout = null; 
	 	   
	 	OutputStream output = null;
		output = response.getOutputStream();
		if(filepath.startsWith("ftp://"))//如果是ftp,则用FTP下载
		{
			FTPHelper ftp = new FTPHelper();
			String serverFile = ftp.parseFTPAddress(filepath);
	       	ftp.get(serverFile, output);
	        output.flush();	
	        
		}else{
			FileInputStream fis = null;
			try{
			    //如果是中文路径,在此处抛出异常
			    in = new java.io.FileInputStream(filepath);     
			    binpu = new java.io.BufferedInputStream(in);  
			    bout = new java.io.BufferedOutputStream(response.getOutputStream());  
			    byte[] b = new byte[1024];   
			    
				int i = 0;
			    while((i = binpu.read(b,0,b.length)) > 0){     
			        bout.write(b, 0, i);     
			    }         
			    bout.flush();    
			    response.flushBuffer();  
			}catch(Exception e){
				e.printStackTrace();
		 	}
			finally{
				if(fis != null){
					fis.close();
		 	  		fis = null;
		 	  	}			
		 	}
		}
		if(output != null){
			output.close();
			output = null;
		}
	}
}


最后找了半天发现并不是FileInputStream本身的问题,在server配置时没有将编码格式转成utf-8
首先在eclipse中找到配置的sever,在server中找到,server.xml文件,在xml文件中把文件修改成如下这句话,就欧克了

 

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

关注我,获取400个的赚钱金点子,轻松开启程序员的副业生涯

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值