学习java的第二十七天。。。(输入输出流)

今天学习了输入输出流中的几个类,1、InputStream类(抽象类)2、FileInputStream类(InputStream类的子类)3、OutputStream类(抽象类)4、FileOutputStream类(OutputStream类的子类)5、Reader类(抽象类)6、InputStreamReader类(Reader类的子类)7、FileReader类(InputStreamReader类的子类)8、BufferedReader类(Reader类的子类)9、Writer类(抽象类)10、OutputStreamWriter类(Writer类的子类)11、FileWriter类(OutputStreamWriter类的子类)12、BufferedWriter类(Writer类的子类)

通过流来读写文件

    流是一组有序的数据序列
    以先进先出方式发送信息的通道

Java流的分类

InputStream类常用方法

    int read( )
    int read(byte[] b)
    int read(byte[] b,int off,int len)
    void close( )
    int available():可以从输入流中读取的字节数目

FileInputStream常用的构造方法

    FileInputStream(File file)
    FileInputStream(String name)

使用FileInputStream 读文本文件

    引入相关の类
        import java.io.IOException;
        import java.io.FileInputStream;
    构造文件输入流
        FileInputStream fis= new FileInputStream("c:\\test.txt");
    读取文本文件的数据
        fis.available(); 
        fis.read(); 
    关闭文件流对象
        fis.close(); 

    public static void main(String[] args) throws IOException {
		//创建对象
		FileInputStream fis = new FileInputStream("f:/a.txt");
		
		//读取数据,将读取到的数据存储在声明的数组中
		byte[] bytes = new byte[1024];
		int num=fis.read(bytes);
		System.out.println(num);
		//遍历数组获取读取到的数据
		for (int i = 0; i < num; i++) {
			System.out.print((char)bytes[i]);
		}
		//数据读取完毕之后,关闭流
		fis.close();
	}

OutputStream类常用方法

    void write(int c)
    void write(byte[] buf)
    void write(byte[] b,int off,int len)
    void close()
    void flush():强制把缓冲区的数据写到输出流中

FileOutputStream常用的构造方法

    FileOutputStream (File file)
    FileOutputStream(String name)    
    FileOutputStream(String name,boolean append)
    1.前两种构造方法在向文件写数据时将覆盖文件中原有的内容
    2.创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

使用FileOutputStream 写文本文件

    引入相关の类
        import java.io.IOException;
        import java.io.FileOutputStream;
    构造文件输出流
        FileOutputStream fos = new FileOutputStream("text.txt");
    读取文本文件的数据
        String str ="好好学习Java";
        byte[] words  = str.getBytes();
        fos.write(words, 0, words.length);
    关闭文件流对象
        fos.close(); 

 

        //创建FileOutputStream类对象
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream("F:/a.txt", true);
			// 准备数据
			String strs = "asdfgfhjk";
			// 将字符串strs转换成字节数组
			byte[] bytes = strs.getBytes();
			//开始写数据
			fos.write(bytes);
			System.out.println("文件写入完毕");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

Reader类常用方法

    int read( )
    int read(char[] c)
    read(char[] c,int off,int len)
    void close( )

 子类InputStreamReader常用的构造方法

    InputStreamReader(InputStream in)
    InputStreamReader(InputStream in,String charsetName)

        System.out.println(System.getProperty("file.encoding"));
		//创建File类对象
		File file = new File("F:/a.txt");
		//创建InputStream类的引用(InputStream是一个抽象类,无法实例化,可以创建其子类对象)
		InputStream is=null;
		//创建InputStreamReader类对象
		InputStreamReader isr=null;
		try {
			is = new FileInputStream(file);
			isr = new InputStreamReader(is, "utf-8");
			char[] chs = new char[1024];
			int num=isr.read(chs);
			for (int i = 0; i < num; i++) {
				System.out.print(chs[i]);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				isr.close();
				is.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

FileReader类是InputStreamReader的子类

FileReader(File file)
FileReader(String name)
该类只能按照本地平台的字符编码来读取数据,用户不能指定其他的字符编码类型
System.out.println(System.getProperty("file.encoding"));  获得本地平台的字符编码类型

 使用FileReader读取文件

    引入相关的类
        import java.io.Reader;
        import java.io.FileReader;
        import java.io.IOExceprion;
    创建FileReader对象
        Reader fr= new FileReader("D:\\myDoc\\简介.txt");
    读取文本文件的数据
        fr.read();
    关闭相关的流对象
        fr.close();

 

//创建对象,File类对象只能按照本地平台的编码格式读取文件,如果文件编码和本地平台不一样,会出现乱码的现象
		FileReader fr =null;
		try {
			fr = new FileReader("F:/a.txt");
			char[] chs = new char[1024];
			//读取数据
			int num=fr.read(chs);
			for (int i = 0; i < num; i++) {
				System.out.println(chs[i]);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	

BufferedReader类

BufferedReader类是Reader类的子类
BufferedReader类带有缓冲区
按行读取内容的readLine()方法
BufferedReader常用的构造方法
    BufferedReader(Reader in)
子类BufferedReader特有的方法
     readLine()

Writer类常用方法

    write(String str)
    write(String str,int off,int len)
    void close()
    void flush()

 子类OutputStreamWriter常用的构造方法

    OutputStreamWriter(OutputStream out)
    OutputStreamWriter(OutputStream out,String charsetName)

FileWriter类是OutputStreamWriter的子类

FileWriter (File file)
FileWriter (String name)
该类只能按照本地平台的字符编码来写数据,用户不能指定其他的字符编码类型

使用FileWriter写文件

引入相关的类
    import java.io.Reader;
    import java.io.FileWriter;
    import java.io.IOException;
创建FileReader对象
    Writer fw= new FileWriter("D:\\myDoc\\简介.txt");
写文本文件
    fw.write();
关闭相关的流对象
    fw.close();

        Writer writer=null;
		BufferedWriter bw=null;
		try {
			writer = new FileWriter("f:/demo.txt",true);
			bw = new BufferedWriter(writer);
			//先向文件中插入一个换行
			bw.newLine();
			bw.write("sahdk");
			bw.newLine();
			bw.write("dsjlfsda");
			System.out.println("数据写入完毕");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				bw.close();
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

BufferedWriter类 

BufferedWriter类是Writer类的子类
BufferedWriter类带有缓冲区
BufferedWriter常用的构造方法
     BufferedWriter(Writer out)

使用BufferedWriter写文件

    引入相关的类
        import java.io.FileWriter ;
        import java.io.BufferedWriter ;
        import java.io.IOException;
    创建BufferedWriter对象和fileWriter对象
        FileWriter fw=new FileWriter("C:\\myTest.txt"); 
        BufferedWriter bw=new BufferedWriter(fw);
    调用write()方法写数据
        bw.write("hello");
    流对象的清空和关闭flush()和close()
        bw.flush();  
        fw.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放在糖果旁的是我很想回忆的甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值