欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

笔记-迎难而上之Java基础进阶6

程序员文章站 2022-05-10 13:02:43
文件复制 字符输入流Reader类 Reader类是字符流最顶层的类 成员方法: 1. int read() 读取单个字符并返回 2. int read(char[] cubf)一次性读取多个字符,将字符读入数组 3. void close() 关闭流并释放资源 FileReader继承了Reade ......
import java.io.*;
public class inputstreamdemo{
    public static void main(string[] args) throws ioexception{
        //创建输入流对象,创建对象时绑定读取的数据源
        fileinputstream fis = new fileinputstream("e:\\study\\demo12\\c.txt");
        //创建byte[] 数组,让他一次性读取多个字节
        byte[] bytes = new byte[1024];
        int len=0;
        //用len来接收读取到的有效字节
        //因为文件中有5个字节,所以把五个字节传递给len
        while((len=fis.read(bytes))!=-1){
            //string的构造方法,可以把字节数组变成字符串
            system.out.println(new string(bytes));
        }
        fis.close();
    }
}

文件复制

package demo16;

import java.io.*;
public class copydemo{
    public static void main(string[] args) throws ioexception{
        //创建fileinputstream对象,需要指定读取的数据源文件的位置
        fileinputstream fis = new fileinputstream("c:\\cloudmusic\\mv\\周二珂 - 告白气球.mp3");
        //绑定要输出的的数据目的地
        fileoutputstream fos = new fileoutputstream("e:\\study\\demo13\\周二珂 - 告白气球.mp3");
        //创建字节数组,让他一次性读取多个文件
        byte[] bytes  = new byte[1024];
        //创建一个整数变量,让他接收读取到的有效字节和写入的有效字节
        int date = 0;
        //当读取到文件末尾时会返回-1,只要读取的字节不等于-1,就继续读取
        //把读取到的有效字节,赋值给date,只要不等于-1,就写入文件
        //从输入流中读取一些字节数并将它们存储到缓冲区数组bytes中。
        while((date=fis.read(bytes))!=-1){
            //读一个字节写一个字节
            //为什么写入的数据是bytes??,因为读取的数据就存储到bytes中
            fos.write(bytes,0,date);
        }
        fos.close();
        fis.close();
    }
}

字符输入流reader类

reader类是字符流最顶层的类

成员方法:

  1. int read() 读取单个字符并返回
  2. int read(char[] cubf)一次性读取多个字符,将字符读入数组
  3. void close() 关闭流并释放资源
filereader继承了reader

构造方法 filereader(string filename) 参数是一个文件的路径

​ filereader(file file) 参数是一个文件

字符输入流读取字符数据

import java.io.*;
public class readerdemo{
    public static void main(string[] args) throws ioexception{
        //字符流的创建,需要绑定数据源
        //绑定了文件路径,也可以绑定文件
        filereader fr = new filereader("e:\\study\\demo13\\a.txt");
        //使用循环来读取文件
        /*int len = 0;
        //read(),返回的是读取到的字符
        while((len=fr.read())!=-1){
            system.out.println((char)len);
        }*/
        int len = 0;
        //试一下用数组来读取文件
        //定义一个字符数组,他是用来存储读取到的字符
        char[] cs = new char[1024];
        while((len=fr.read(cs))!=-1){
            //string的构造方法,可以把字符数组转换成字符串
            system.out.println(new string(cs,0,len));
        }
        fr.close();
    }
}

字符输出流的基本使用_写单个字符到文件

public static void main(string[] args) throws ioexception{
        //创建filewriter对象,绑定写入的数据目的地
        //如果没有文件会创建文件
        filewriter fw = new filewriter("e:\\study\\demo13\\b.txt");
        //write(int c)写入单个字符,
        fw.write(97);//这里只是把数据写入到内存缓冲区中
        //需要flush()把存在内存缓冲区的数据写入到文件中
        fw.flush();
        fw.close();
    }

flush方法和close方法的区别

flush:刷新缓冲区,流对象可以继续使用

close:先刷新缓冲区,通知系统释放资源,流对象不能再使用

字符输出流写数据的其他方法
import java.io.*;
public class writerdemo1{
    public static void main(string[] args) throws ioexception{
        filewriter fw = new filewriter("e:\\study\\demo13\\d.txt");
        //void write(char[] cbuf)可以写入字符数组
        char[] cs = {'云','想','衣','裳','花','想','容'};
        fw.write(cs);
        //写入字符数组的一部分,从索引2开始写,写四个字符
        fw.write(cs,2,4);
        //写字符串
        fw.write("春风扶槛露华浓");
        //写一部分字符串
        fw.write("若非群玉山头见",0,3);
        fw.close();
    }
}
字符输出流的续写和换行
public class writedemo2{
    public static void main(string[] args){
        //如若参数为false,则会覆盖源文件,为true会在源文件的后面续写
        filewriter fw = new filewriter("e:\\study\\demo13\\f.txt",true);
        fw.write("云想衣裳花想容");
        //换行符是\r\n
        fw.write("\r\n"+"春风扶槛露华浓");
        fw.write("\r\n"+"若非群玉山头见");
        fw.write("\r\n"+"会向瑶台月下逢");
        fw.close();
        //现在仿佛执行程序都不会覆盖源文件
    }
}
properties集合存储数据

properties类表示了一个持久的属性集,properties 可保存在流中或从流中加载

properties集合是一个唯一和io流相结合的集合

//propertiesdemo集合的常见方法和使用
import java.util.*;
public class propertiesdemo{
    public static void main(string[] args){
        //创建properties集合的对象
        properties prop = new properties();
        //调用properties的方法setproperty
        prop.setproperty("李白","18");
        prop.setproperty("杜甫","22");
        prop.setproperty("苏轼","25");
        //取出键
        set<string> set = prop.stringpropertynames();
        //遍历set,通过k获取v
        for(string key : set){
            string value = prop.getproperty(key);
            system.out.println(key+" "+value);
        }
        
    }
}   

properties集合中的方法store

void store(outputstream out, string comments),字节输出流,不能写入中文

void store(writer writer,string comments)字符输出流,可以写中文

import java.util.*;
import java.io.*;
public class propertiesdemo{
    public static void main(string[] args) throws ioexception{
        //创建properties集合的对象
        properties prop = new properties();
        //调用properties的方法setproperty
        prop.setproperty("李白","18");
        prop.setproperty("杜甫","22");
        prop.setproperty("苏轼","25");
        //properties集合中的方法store,可以把集合中的临时数据写入到硬盘中去
        filewriter fw = new filewriter("e:\\study\\demo13\\e.txt");
        prop.store(fw,"save date");
        fw.close();
        
        
    }
}   

笔记-迎难而上之Java基础进阶6

properties集合中的方法load

可以使用properties集合中的方法load,把硬盘中保存的文件,读取到集合中使用

void load(inputstream instream)字节输入流,不能读取中文的键值对

void load(reader reader)字符输入流,能读取含有中文的键值对

public static void main(string[] args) throws ioexception{
        properties prop = new properties();
        prop.load(new filereader("e:\\study\\demo13\\e.txt"));
        set<string> set = prop.stringpropertynames();
        for(string key :set){
            string value = prop.getproperty(key);
            system.out.println(key+"="+value);
        }
        
    }

bufferedoutputstream_字节缓冲输出流

bufferedoutputstream继承自outputstream

bufferedoutputstream的构造方法:

bufferedoutputstream(outputstream out):创建一个新的缓冲输入流,已将数据写入指定的底层输出流

bufferedoutputstream(outputstream out,int size):创建一个新的缓冲输入流,已将数据写入指定的底层输出流,并且指定缓冲区的大小

import java.io.*;
public class bufferedoutputstreamdemo {
    public static void main(string[] args) throws ioexception{
        fileoutputstream fos = new fileoutputstream("e:\\study\\demo13\\g.txt");
        bufferedoutputstream bos = new bufferedoutputstream(fos);
        bos.write("云想衣裳花想容".getbytes());
        bos.close();
    }
}

bufferedinputstream_字节缓冲输入流

import java.io.*;
public class bufferedinputstreamdemo {
    public static void main(string[] args) throws ioexception{
        fileinputstream fis = new fileinputstream("e:\\study\\demo13\\g.txt");
        bufferedinputstream bis = new bufferedinputstream(fis);
        int len=0;
        while((len=bis.read())!=-1){
            system.out.println((char)len);
        }
        bis.close();
    }
}

bufferedwriter_字符缓冲输出流

//这段代码在编译器不报错,在命令行一直报错
public static void main(string[] args) throws ioexception{
        //创建字符缓冲输出流
        bufferedwriter bw = new bufferedwriter(new filewriter("e:\\study\\demo13\\h.txt"));
        //调用方法写入字符
        for(int i=0;i<10;i++){
            bw.write("云想衣裳花想容");
            bw.newline();
        }
        //关闭流,同时flush把缓冲区的数据,刷新到文件中         
        bw.close();
    }
bufferedreader_字符缓冲输入流
 public static void main(string[] agrs) throws ioexception{
        //创建一个bufferedreader对象
        bufferedreader br = new bufferedreader(new filereader("e:\\study\\demo13\\h.txt"));
        //调用方法read或者readline,readline返回的是一行,没有就返回null
        string line;
        while((line=br.readline())!=null){
            system.out.println(line);
        }

        br.close();

    }

文本排序练习

笔记-迎难而上之Java基础进阶6

import java.io.*;
import java.util.hashmap;
//把一个打乱序号的文本恢复正常的排序
public class copydemo{
    public static void main(string[] args) throws ioexception{
        //分别存储序号和文本
        hashmap<string,string> hm = new hashmap<>();
        bufferedreader br = new bufferedreader(new filereader("e:\\study\\demo13\\k.txt"));
        bufferedwriter bw = new bufferedwriter(new filewriter("e:\\study\\demo12\\k.txt"));
        string line;
        while((line=br.readline())!=null){
            //将字符串进行切割,返回的是一个字符串数组,分别有索引0和索引1
            //可以把0为序号,1为文本内容
            //调用字符串的切割文本方法
            string[] arr = line.split("\\.");
            //key值会自动排序
            hm.put(arr[0],arr[1]);
        }
        //keyset会把hashmap的键全部取出来,放到一个集合中
        //遍历这个集合就可以拿到key
        for(string key : hm.keyset()){
            string value=hm.get(key);
            line = key +"."+value;
            //读一行,写一行
            bw.write(line);
            bw.newline();
        }
        bw.close();
        br.close();
    }
}
转换流
outputstreamwriter:

构造方法

outputstreamwriter(outputstream out)

outputftreamwriter(outputstream out, string charsename)

参数outputstream:字节输出流,可以用来写转换之后的字节到文件中

参数string charsetname:编码名称

使用步骤:

  1. 创建outputstreamwrite对象,构造方法中传递字节输出流和编码名称

  2. 使用outputstreamwriter对象中的方法write,把字符转换为字节存储缓冲区中

  3. 使用outputstreamwriter对象中的方法flush

    import java.io.*;
    public class outputstreamwriterdemo{
        public static void main(string[] args) throws ioexception{
            gbk_write();
        }
        public static void utf_8_write() throws  ioexception{
    
            //传递一个字节输出流的对象,默认编码表是utf-8
            outputstreamwriter osw = new outputstreamwriter(new fileoutputstream("e:\\study\\demo13\\i.txt"));
            osw.write("云想衣裳花想容");
            osw.flush();
            osw.close();
        }
        public static void gbk_write() throws ioexception {
            outputstreamwriter osw = new outputstreamwriter(new fileoutputstream("e:\\study\\demo13\\j.txt"),"gbk");
            osw.write("春风扶槛露华浓");
            osw.flush();
            osw.close();
        }
    }
    

    inputstreamreader类

    可以按照指定的编码表来解码

    构造方法:

    inputstreamreader(inputstream in)

    inputstreamreader(inputstream in,string charsetname)

import java.io.fileinputstream;
import java.io.ioexception;
import java.io.inputstreamreader;

public class inputstreamreaderdemo {
    public static void main(string[] args) throws ioexception {
        //read_utf_8();
        read_gbk();
    }

    private static void read_gbk() throws ioexception {
        //读取gbk文件
        inputstreamreader isr = new inputstreamreader(new fileinputstream("e:\\study\\demo13\\j.txt"),"gbk");
        int len=0;
        while ((len=isr.read())!=-1){
            system.out.println((char)len);
        }
        isr.close();
    }


    private static void read_utf_8() throws ioexception {
        //读取utf-8文件
        inputstreamreader isr = new inputstreamreader(new fileinputstream("e:\\study\\demo13\\i.txt"));
        int len=0;
        while ((len=isr.read())!=-1){
            system.out.println((char)len);
        }
        isr.close();
    }

}