java基础16

实例:当每次打开软件就在配置文件中记录该软件打开的次数,到达5次时,提示不能在使用。

        File confile = new File("count.properties");
        if(!confile.exists()) {
            confile.createNewFile();
        }
        FileInputStream fis = new FileInputStream(confile);
        Properties prop = new Properties();
        prop.load(fis);
        String value = prop.getProperty("time");//从集合中通过键获取次数
        int count = 0;//定义计数器,记录获取到的次数
        if(value!=null) {
            count = Integer.parseInt(value);
            if(count>5) {
                throw new RuntimeException("使用次数已达到上线,请注册");
            }
        }
        count++;
        prop.setProperty("time", count+"");
        FileOutputStream fos = new FileOutputStream(confile);
        prop.store(fos,"");
        fis.close();
        fos.close();

IO包中的其他流

打印流:PrintStream

1.提供了打印方法可以对多种数据类型值进行打印,并保证数据的表现形式。

2.不抛IOException

构造函数接收三种类型值:

1.文件名字符串。2.File类对象。3.输出流对象。

PrintStream out = new PrintStream("print.txt");

out.write(610);//只写最低八位

out.print(97);//先将97变成字符保持原样将数据打印到目的地

字符打印流:PrintWriter

构造函数参数:1.字符串路径.  2.File对象。3.字节输出流。4.字节输出流。

SequenceInputStream(能将多个流组装成一个流)

SequenceInputStream sis = new SequenceInputStream(Enumeration en);//参数为枚举类型,可以将多个流封装到一个枚举对象中。

实例:将多个文件合并成一个文件。

        Vector<FileInputStream> v = new Vector<FileInputStream>();//换成ArrayList能提高效率
        v.add(new FileInputStream("1.txt"));
        v.add(new FileInputStream("2.txt"));
        v.add(new FileInputStream("3.txt"));
        Enumeration<FileInputStream> en = v.elements();
        SequenceInputStream sis = new SequenceInputStream(en);
        FileOutputStream fos = new FileOutputStream("4.txt");
        byte[] buf = new byte[1024];
        int len = 0;
        while((len = sis.read(buf))!=-1) {
            fos.write(buf,0,len);
        }
        sis.close();
        fos.close();

操作对象的流:ObjectInputStream,ObjectOutputStream

作用:将对象(实现Serializable)持久化到硬盘。

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.object"));
        oos.writeObject(new Person("小强", 22));//对象的序列化
        oos.close();

RandomAccessFile类(不是IO体系中的子类)

特点:1.该对象即能读,又能写。2.该对象内部维护了一个byte数组,并通过指针可以操作数组中的元素。3.可以通过getFilePointer方法获取指针的位置,和通过seek方法设置指针的位置。4.其实该对象就是将字节输入流和字节输出流进行了封装。5.该对象的源或目的只能是文件,通过构造函数就可以看出。

        RandomAccessFile raf = new RandomAccessFile("rance.txt", "rw");
        raf.seek(3*8);
        raf.write("哈哈".getBytes());
        raf.writeInt(108);
        raf.close();

管道流:PipedInputStream, PipedOutputStream(管道流与多线程相结合)

数据流:DateOutputStream,DateInputStream(操作基本数据类型的流)

操作字节数组:ByteArrayInputStream,ByteArrayOutputStream(包含一个内部的缓冲区)

操作字符数组:CharArrayReader,CharArrayWriter

操作字符串:StringReader,StringWriter

编码表:记录二进制与生活中文字的对应关系。

ASCII:美国标准信息交换码

ISO8859-1:拉丁码表,欧洲码表(一个字母8位表示)

GBK:中国中文编码表升级,融合了多种符号。

Unicode:国际标准码表,融合多种文字。

UTF-8:最多用三个字节来表示一个字符。(如果一个字符,可以使用一个字节装下就是用一个字节去装,反之,就使用两个字节去装)

字符串---》字符数组:编码

字符数组---》字符串:解码

编解码出现的问题

String str = "你好";
byte[] buf = str.getBytes("gbk");
String s1 = new String(buf,"iso8859-1");

注意:在编码和解码不使用同一张码表时容易产生乱码;

猜你喜欢

转载自blog.csdn.net/weixin_42581821/article/details/86736844