huangww2
huangww2
采纳率0%
2015-07-26 12:59 阅读 4.4k

IO流读取文件乱码,为什么?

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.io.*"%>
<%@ page import="org.apache.struts2.ServletActionContext"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


/s:param
/s:fielderror<!-- 为什么这个存在时直接访问此界面时就不会报错,否则报错 -->
<% //request.setCharacterEncoding("UTF-8") ;
    String realpath = ServletActionContext.getServletContext()  
            .getRealPath("/upload");
     try {   
            // 创建文件输入流对象   
            FileInputStream is = new FileInputStream(realpath+"\\"+"nihao.doc");   
            // 设定读取的字节数   
            int n = 512;   
            byte buffer[] = new byte[n];   
            // 读取输入流   
            while (is.read(buffer, 0, n) >0) { 
                String str = new String(buffer);  
                out.print(str);  
                out.print("<br>"); 
            }   
            // 关闭输入流   
            is.close();   
            } catch (IOException ioe) {   
            System.out.println(ioe);   
            } catch (Exception e) {   
            System.out.println(e);   
            }
 %>


  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

8条回答 默认 最新

  • whb00115 whb00115 2015-07-26 13:05

    构建源 构建目标 输入输出流实现传输

    点赞 评论 复制链接分享
  • CSDNXIAOS Robot-S 2015-07-26 13:09

    主要思想:1,构建源;2构建目标;3,用输入输出流来实现传输;
    字节输入、输出流:InputStream / OutputStream,字符输入、输出流Reader/Writer;
    注:一般文本数据用字符流,其他格式数据用字节流;
    InputStreamReader把一个InputStream转化成一个Reader;
    BufferedReader通常和PrintWriter配合使用;
    字......
    答案就在这里:【insigma】IO流(文件读取)
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    点赞 评论 复制链接分享
  • ayouaretheone ayouaretheone 2015-07-26 13:10

    构建源 构建目标 输入输出流实现传输

    点赞 评论 复制链接分享
  • fy963057560 菜鸟攻城师 2015-07-26 13:35

    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> 这里是 GB2312 看一下源文件是什么编码,如果编码不同就在读写的时候重新设置编码

    点赞 评论 复制链接分享
  • Evankaka Evankaka 2015-07-26 14:22

    // 创建文件输入流对象

    FileInputStream is = new FileInputStream(realpath+"\"+"nihao.doc");

    应该是这里出错了,比如你这个文件 是用UTF-8编码的。
    然后你将这些字节转换成字符时,你没有指定解码的格式,一般是使用ISO.所以你读的时候要指定下解码的格式

    FileInputStream is = new FileInputStream(realpath+"\"+"nihao.doc");

    InputStreamRead read=new InputStreamRead(is,"UTF-8")//这里可以设置不同的解码方式

      // 设定读取的字节数   
            int n = 512;   
            byte buffer[] = new byte[n];   
            // 读取输入流   
            while (read.read(buffer, 0, n) >0) { 
                String str = new String(buffer);  
                out.print(str);  
                out.print("<br>"); 
            }   
    
    点赞 评论 复制链接分享
  • Evankaka Evankaka 2015-07-26 14:23

    使用InputStreamRead read=new InputStreamRead(is,"UTF-8")//这里可以设置不同的解码方式。
    然后再从read里来读

    点赞 评论 复制链接分享
  • yuke198907 yuke198907 2015-07-27 00:58

    没有设置编码,设置编码试试

    点赞 评论 复制链接分享
  • strutce 丵鹰 2015-07-27 01:55

    <% 这里面的是java代码%>这个你可以debug调试下看看是什么错误

    点赞 评论 复制链接分享

相关推荐