MyEclipse------随机流(能读也能写数据)

RandomAccessFile流指向文件时,不刷新文件。

其中seek(long a)用来定位RandomAccessFile流的读写位置,其中参数a确定读写位置距离文件开头的字节个数.

 

other.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<%@page import="java.io.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> 
<title>My JSP 'other.jsp' starting page</title>
</head>

<body>
    <%
        //dat为数据流格式,改为txt会出现乱码,这里如果直接用txt也会出现乱码
        File file=new File("C:\\Users\\X550V\\Desktop","cc.txt");
        if(!file.exists()){
            //这里的代码用于解决输入流乱码时,不用时可以注释掉
            file.createNewFile();
            out.print("文件创建成功");
            byte d[]="新年快乐".getBytes();//将字符串转换为字节,使用机器默认的编码方式,也可以在括号里修改
            OutputStream ou=new FileOutputStream(file);
            ou.write(d);
            ou.close();
        }
        RandomAccessFile inAndOut=null;
        int data[]={1,2,3,4,5,6,7,8,9,10};
        char c[]={'你','好','世','界'};
        String str[]={"","","","我喜欢青檀","0000","zzzz"};
        try{
            inAndOut=new RandomAccessFile(file,"rw");
            
            //int类型
            /* for(int i=0;i<data.length;i++){
                inAndOut.writeInt(data[i]);
            } 
            for(long i=data.length-1;i>=0;i--){
                //一个Int类型的数据占四个字节
                inAndOut.seek(i*4);
                out.print(inAndOut.readInt());
            }     */
            
            //char类型,可输入中文
            /* for(int i=0;i<c.length;i++){
                inAndOut.writeChar(c[i]);
            }
            for(long i=0;i<c.length;i++){
                //一个char占两个字节
                inAndOut.seek(i*2);
                out.print(inAndOut.readChar());
            } */    
            
            //String类型,可输入中文
            /* for(int i=0;i<str.length;i++){
                inAndOut.writeChars(str[i]);
            }
            for(long i=0;i<6;i++){
                //一个String的汉字,数字,字母都是两个字节,所以i*2
                inAndOut.seek(i*2);
                //str.length=6,所以只能输出到第六个字:欢
                out.print(inAndOut.readChar());
                out.print(inAndOut.getFilePointer()+"<br>");//获取流的当前读写位置
            }
            out.print("<br>"+str.length); */
            
            //解决输入流乱码问题
            long length=inAndOut.length();
            long position=0;
            inAndOut.seek(position);//将读取位置定位到文件的起始
            while(position<length){
                String info=inAndOut.readLine();
                byte b[]=info.getBytes("iso-8859-1");
                //如果机器的默认编码是gb2312,则info=new String(b);这样写也行
                info=new String(b,"gb2312");
                position=inAndOut.getFilePointer();
                out.print(info);
            }
        }
        catch(IOException e){
            out.print(e);
        }
     %>
</body>
</html>

 

posted @ 2016-03-28 11:16  玉天恒  阅读(410)  评论(0编辑  收藏  举报