用java.io读写文件的中文乱码问题

SourceView2利用URLConnection链接一个jsp页面,获得一个文件的inputStream,来在磁盘上创建一个文件,程序是可以运行的但只要是中文就显示乱码,希望大家帮我解决这个问题
SourceView2.java
 
  1. import java.io.*;  
  2. import java.net.*;  
  3. import java.util.Map;  
  4.   
  5. public class SourceView2 {  
  6.   
  7.     public static String convertName(String name){  
  8.         name=name.replaceFirst("\"","");  
  9.         name=name.replaceFirst("\\[""");  
  10.         name=name.substring(0,name.lastIndexOf("\""));  
  11.         return name;  
  12.     }  
  13.     /** 
  14.      * @param args 
  15.      */  
  16.     public static void main(String[] args) {  
  17.         // TODO Auto-generated method stub  
  18.         try {  
  19.               
  20.             String encoding = "gb2312";  
  21.             URL u = new URL(  
  22.                     "http://localhost:8080//download/download_client.jsp");  
  23.             URLConnection uc = u.openConnection();  
  24.               
  25.             String contentType = uc.getContentType();  
  26.             int encodingStart = contentType.indexOf("charset=");  
  27.             if (encodingStart != -1) {  
  28.                 encoding = contentType.substring(encodingStart + 8);  
  29.             }  
  30.             InputStream raw = uc.getInputStream();  
  31.             InputStream buffer = new BufferedInputStream(raw);  
  32.           
  33.             Reader r = new InputStreamReader(buffer, encoding);  
  34.               
  35.             Map map = uc.getHeaderFields();  
  36.               
  37.             System.out.println(map.toString());  
  38.             System.out.println(map.get("Filename"));  
  39.             String filename = map.get("Filename").toString();  
  40.             String fileSize=map.get("Size").toString();  
  41.             fileSize=SourceView2.convertName(fileSize);  
  42.             filename=SourceView2.convertName(filename);  
  43.             System.out.println(filename);  
  44.             System.out.println(fileSize);  
  45.             int size=new Long(fileSize).intValue();  
  46.             //在本地磁盘创建数据  
  47.             byte[] data=new byte[size];  
  48.             buffer.read(data);  
  49.             int offset=0;  
  50.             int bytesRead=0;  
  51.             while(offset<size){  
  52.                 bytesRead=buffer.read(data,offset,data.length-offset);  
  53.                 if(bytesRead==-1)   
  54.                     break;  
  55.                 offset+=bytesRead;  
  56.             }  
  57.             buffer.close();  
  58.             FileOutputStream fout=new FileOutputStream("e:\\"+filename); 
  59. //          BufferedWriter   fout=new BufferedWriter(new FileWriter("e:\\aaaa.txt"));     
  60.               
  61.           
  62.             fout.write(data);  
  63.               
  64.             fout.flush();  
  65.             fout.close();  
  66.               
  67.         } catch (MalformedURLException e) {  
  68.             e.printStackTrace();  
  69.         } catch (IOException e) {  
  70.             e.printStackTrace();  
  71.         }  
  72.     }  
  73.   
  74. }  
jsp页面
 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page import="java.io.*"%>  
  2. <%  
  3.         java.io.FileInputStream fileInputStream=null;  
  4.       
  5.         try{  
  6.             //   得到文件名字和路径     
  7.             String filename = "pdm.xls";  
  8.             String filepath = "c:\\download\\"; 
  9.             File file=new File(filepath+filename); 
  10.             //   设置响应头和下载保存的文件名    
  11.             response.setContentType("APPLICATION/OCTET-STREAM"); 
  12.             response.setHeader("Content-Disposition", 
  13.                     "attachment;   filename=\""+filename+ "\"");  
  14.             response.setHeader("Filename","\"" + filename + "\"");  
  15.             response.setHeader("Size","\"" + file.length() + "\"");  
  16.             //   打开指定文件的流信息     
  17.               
  18.             fileInputStream = new java.io.FileInputStream(  
  19.                     filepath + filename);  
  20.   
  21.             //   写出流信息     
  22.             int i;  
  23.               
  24.             while ((i = fileInputStream.read()) != -1) {  
  25.                 out.write(i);  
  26.             }  
  27.             }catch(IOException e){  
  28.             e.printStackTrace();  
  29.             }  
  30.             finally{  
  31.               
  32.             fileInputStream.close();  
  33.             }  
  34. %>  
  35.       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值