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

  • 相关阅读:
    JavascriptCore中扩展自定义函数
    Qt for Symbian应用的开发转载
    Qt Symbian 开发环境安装转载
    qt屏幕抓图
    为JavascriptCore添加自定义对象
    Tesseract OCR开源项目转载
    Joomla, Wordpress, Drupal 全面详细Pk比较转载
    Drupal,Joomla,Wordpress在内置应用功能方面的区别和比较转载
    Docker:第五章:基于centos7的docker安装配置部署教程以及基于docker Tomcat镜像使用的项目部署教程
    【JavaP6大纲】Redis篇:redis集群工作原理,协议,分布式寻址算法
  • 原文地址:https://www.cnblogs.com/java-cjt/p/4004482.html
Copyright © 2020-2023  润新知