zoukankan      html  css  js  c++  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设备,如:网络、内存映像等。
           一个文件中文件指示器只有一个不管是读还是写,都是以文件指示器的位置为开始位置进行读写。
                 

  • 相关阅读:
    conrtex 和 ARM 的关系
    C语言中的内存分配深入
    钳位电路
    向量中断与非向量中断的区别
    Freescale PowerPC处理器优势
    路由器端口映射,远程桌面连接端口映射+花生壳=让人访问你个人服务器或WEB站点
    linux 下用G++编译C++
    Javascript基础知识篇(1): 初识Javascript
    Javascript实战应用篇(3):动态加载JS和CSS文件
    Javascript高级技术篇(1):搭建JS框架类库
  • 原文地址:https://www.cnblogs.com/java-cjt/p/4004482.html
Copyright © 2011-2022 走看看