首页 > 编程语言 > 详细

java 输入输出

时间:2014-10-02 22:30:13      阅读:421      评论:0      收藏:0      [点我收藏+]

输入输出:
File类:是IO包中唯一代表磁盘文件本身信息的类,而不是文件中的内容。
        定义了一些与平台无关的方法来操作文件,例如:创建、删除、重命名等。
        java中的目录被当做一种特殊的文件使用,list方法可以返回目录中所有子目录和文件名。
RandomAccessFile类:支持随机访问方式。(对于流格式的文件,一般要从头开始读取,而通过此类,只需把文件指示器移动到要读取的位置即可)
       1. 该类对象的内部有个文件指示器,可以从指定位置读取数据。(网络程序中的断点续传功能;FTP服务器中多线程下载的功能,第一个线程下载0-1K,第二个下载1-2K,然后组合)
       2. RandomAccessFile类在随机(相对于顺序而言)读写等长记录格式的文件时有很大优势。
       3. RandomAccessFile仅限于操作文件,而不能操作其他IO设备,如:网络、内存映像等。
       一个文件中文件指示器只有一个不管是读还是写,都是以文件指示器的位置为开始位置进行读写。
           在java中不管中文还是英文字符都是采用Unicode编码,则占用两个字节。但是在本地计算机中,
    英文采用ASCII编码只占用一个字节,而中文占用两个字节。当使用getByes时英文在本地采用
    一个字节表示,而中文采用两个字节表示

public static void main(String[] args) {
        String strEng="a";
        String strChi="我";
        System.out.println(strEng.getBytes().length+"------>"+strChi.getBytes().length);
        System.out.println(strEng.toCharArray().length+"----->"+strChi.toCharArray().length);
    }

 

class Employee{
        public final static int LEN=8;
    String name;
    int age;
    public Employee(String name,int age){
        if(name.length()>LEN)
            this.name=name.substring(0, LEN);
        else{
            while(name.length()<LEN){
                name+="\u0000";
            }
            this.name=name;
        }
        this.age=age;
    }
}    

public static void main(String[] args) throws Exception{
        Employee e1 = new Employee("zhangsan", 23);
        Employee e2 = new Employee("lisi", 24);
        Employee e3 = new Employee("wangwu", 25);
        RandomAccessFile raf = new RandomAccessFile("employee.txt", "rw");
        raf.write(e1.name.getBytes());  
        raf.writeInt(e1.age);
        raf.write(e2.name.getBytes());  
        raf.writeInt(e2.age);
        raf.write(e3.name.getBytes());  
        raf.writeInt(e3.age);
        raf.close();
        
        RandomAccessFile rafb = new RandomAccessFile("employee.txt", "r");
        byte[] buff=new byte[Employee.LEN];
        String name="";
        int age;
        //读取第二个
        rafb.skipBytes(12);
        rafb.read(buff);
        name=new String(buff);
        age = rafb.readInt();
        System.out.println(name.trim()+"----------->"+age);
        //读取第一个
        rafb.seek(0);
        rafb.read(buff);
        name=new String(buff);
        age=rafb.readInt();
        System.out.println(name.trim()+"----------->"+age);
        //读取第三个
        rafb.skipBytes(12);
        rafb.read(buff);
        name=new String(buff);
        age = rafb.readInt();
        rafb.close();
        System.out.println(name.trim()+"----------->"+age);
    }

 

当是中文:

class Employee{
    public final static int LEN=8;
    String name;
    int age;
    public Employee(String name,int age){
        if(name.length()>LEN)
            this.name=name.substring(0, LEN);
        else{
            while(name.length()<LEN){
                name+="\u0000";    //而当name=李四时,又给它补充了六个字符,凑成了8个字符
            }
            this.name=name;
        }
        this.age=age;
    }
}
public class TestRandomAccessFile {
    /*在java中不管中文还是英文字符都是采用Unicode编码,则占用两个字节。但是在本地计算机中,
    英文采用ASCII编码只占用一个字节,而中文占用两个字节。当使用getByes时英文在本地采用
    一个字节表示,而中文采用两个字节表示*/
    //中文出现问题的原因:当字符个数是8时,采用getBytes时不一定往文件中写入的字节数也就是8,因为中文和英文转化为字节的个数是不一样的
    public static void main(String[] args) throws Exception{
        Employee e1 = new Employee("zhangsan", 23);
        Employee e2 = new Employee("李四", 24);
        Employee e3 = new Employee("wangwu", 25);
        RandomAccessFile raf = new RandomAccessFile("employee.txt", "rw");
        raf.writeChars(e1.name);  
        raf.writeInt(e1.age);
        raf.writeChars(e2.name); //当是中文时 则写入的字节数是10
        raf.writeInt(e2.age);
        raf.writeChars(e3.name);  
        raf.writeInt(e3.age);
        raf.close();
        
        RandomAccessFile rafb = new RandomAccessFile("employee.txt", "r");
        String name="";
        int age;
        //读取第二个
        rafb.skipBytes(16+4);
        int i=0;
        for(i=0;i<Employee.LEN;i++){
            name+=rafb.readChar();
        }
        age = rafb.readInt();
        System.out.println(name.trim()+"----------->"+age);
        //读取第一个
        rafb.seek(0);
         name="";
        for(i=0;i<Employee.LEN;i++){
            name+=rafb.readChar();
        }
        age=rafb.readInt();
        System.out.println(name.trim()+"----------->"+age);
        //读取第三个
        rafb.skipBytes(16+4);
         name="";
        for(i=0;i<Employee.LEN;i++){
            name+=rafb.readChar();
        }
        age = rafb.readInt();
        rafb.close();
        System.out.println(name.trim()+"----------->"+age);
    }
}

 

输入输出:
File类:是IO包中唯一代表磁盘文件本身信息的类,而不是文件中的内容。
        定义了一些与平台无关的方法来操作文件,例如:创建、删除、重命名等。
        java中的目录被当做一种特殊的文件使用,list方法可以返回目录中所有子目录和文件名。
RandomAccessFile类:支持随机访问方式。(对于流格式的文件,一般要从头开始读取,而通过此类,只需把文件指示器移动到要读取的位置即可)
       1. 该类对象的内部有个文件指示器,可以从指定位置读取数据。(网络程序中的断点续传功能;FTP服务器中多线程下载的功能,第一个线程下载0-1K,第二个下载1-2K,然后组合)
       2. RandomAccessFile类在随机(相对于顺序而言)读写等长记录格式的文件时有很大优势。
       3. RandomAccessFile仅限于操作文件,而不能操作其他IO设备,如:网络、内存映像等。
       一个文件中文件指示器只有一个不管是读还是写,都是以文件指示器的位置为开始位置进行读写。
             

java 输入输出

原文:http://www.cnblogs.com/java-cjt/p/4004482.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!