首页 > 代码库 > java 输入输出

java 输入输出

输入输出:
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 输入输出