流>>>>>1

IO流:input-outputStream,作用:实现两个设备之间的数据传输。
 
  设备:磁盘(硬盘),内存,键盘,文件,网络,控制台 -- 可以输入输出数据的
  网络:当前主机之外的网上资源
  
  分类:
  根据操作的方式:输入流和输出流
  根据数据的类型:字节流和字符流
  
  字节流:传输的是字节,可以操作任意类型的数据 ------ 音频,视频,文件,图片等
  字符流:传输的是字节,不同点是在传输过程中加入了编码的操作,让我们的操作更方便------文本
  
 输入输出,读入写出都是以内存为参考

 字符流的两个父类:
 字符读入流(将数据输入内存):Reader
 字符写出流(将数据从内存取出):Writer

 字节流:
 字节输入流:InputStream
 字节输出流:OutputStream
  
实例:将数据从内存放入磁盘,字符写出流---FileWriter

public class Demo {

	public static void main(String[] args) throws IOException {
                //1.创建FileWriter对象并关联文件
		FileWriter fw = new FileWriter("temp1.txt");
/*
                注意点一:如果我们只写名字,不写具体的路径,默认的路径是当前的工程
		注意点二:如果关联的文件之前不存在,会创建一个新的,如果存在,直接使用,但是会将之前的内容覆盖掉
		注意点三:我们可以创建自己的路径,但是一定要保证路径是真实存在的.否则报异常---java.io.FileNotFoundException: W:\temp1.txt (系统找不到指定的路径。)
*/
                //2.进行写出操作
		fw.write(" bing bing _ chen chen ");
/*
                注意点一:在执行write方法时,临时将内容写入了流的字节数组中,这里会自动去查编码表.
*/
                //3.刷新
		fw.flush();
/*
                将内容真正写如磁盘
*/
                //4.关闭流
		fw.close();
/*
                功能:a.刷新,b.关闭流。
                注意一:流使用完必须关闭
                注意二:流关闭后不能再进行写入操作 -- java.io.IOException: Stream closed
	}
}

实例:将数据从磁盘读入内存,字符读入流---FileReader

/*
      read():一次读一个字符
          a:会将当前的字符读出   b:会将指针指向下一个字符
          方法的返回值就是读到的字符,当将所有字符读完的时候,返回-1.            
      
      read(数组):一次读多个字符,读到的字符会临时存放在临时数组中
          数组是临时存放数据的地方,数组的大小决定了我们一次读到的字符个数
          一般这个数组的大小在1kb左右
          返回值代表当次读到的真实字符个数.如果返回值是-1,代表读完了
 
*/


public class Demo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileReader fr = new FileReader("temp1.txt");
		int num = 0;
		//第一种读入:
		while((num = fr.read())!=-1) {
			System.out.print((char) num);
		}
		//第二种读入:
		char[] arr = new char[5];
		while((num = fr.read(arr))!=-1) {
			System.out.println(new String(arr,0,num) );
		}
		fr.close();
	}
}

关于\

\代表转义字符      \t:制表符      \n:换行符     \\:表示普通的\
在表示路径的时候,\与/意思一样。


绝对路径和相对路径

D:\\workspace\\BigData1716N21/src/com/qianfeng/test/Demo1.java----绝对路径
src/com/qianfeng/test/Demo1.java---相对路径
绝对路径:一个文件的完整路径,从根目录开始到当前的文件
相对路径:从路径中的某一个部位开始一直到当前的文件---保证了程序的可移植性

/*
     小练习:完成文件的复制
*/
public class Demo {

	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("E:\\Administrator\\代码\\Java\\BigData1716N21\\src\\com\\qianfeng\\test\\Demo8.java");
		FileWriter fw = new FileWriter("temp2.txt");
		int num = 0;
		while((num = fr.read())!= -1) {
			fw.write((char)num);
		}
		fr.close();
		fw.close();
	}
}

文件的续写

/*
     文件的续写--FileWriter("路径",value)
     当value=true的时候,不会将原来的内容删掉,往后接着写
     换行:windows下的换行:\r\n    linux:\n
*/
public class Demo {

	public static void main(String[] args) {
		
		FileWriter fw = null;
		try {
			fw = new FileWriter("temp1.txt",true);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			fw.write("\r\n");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			fw.write("ou ha ha ha ……");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			fw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

字符缓冲流(字符缓冲区):本身没有读写的能力,可以提高读写的效率,如果要想进行读写,必须借助于字符。.

可以将缓冲流比作:高速的小车或者催化剂
 
字符缓冲流分类:
字符缓冲读入流:BufferedReader---提高读的能力
字符缓冲写出流:BufferedWriter---提高写的能力

字符缓冲读入流——BufferedReader 演示

public class Demo {
	public static void main(String[] args) throws IOException {
		BufferedWriter bw = new BufferedWriter(new FileWriter("temp3.txt"));
		bw.write("ha ha ha ……");
		bw.newLine();
		bw.newLine();
		//比\r\n好,可以跨平台
		bw.write("ou hou hou hou ……");
		bw.close();
	} 
}

字符缓冲写出流——BufferedWriter 演示

/*
            readLine()---一次读一行---返回值-String(代表读到的内容)
            原理:一个字符一个字符的读,一直读到换行符,然后将读到的所有字符放入一个字符串,返回.
            注意点:a.不会将换行符返回   b.返回值就是读到的内容,当所有内容读完时,返回null
*/
public class Demo {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("E:\\Administrator\\代码\\Java\\BigData1716N21\\src\\com\\qianfeng\\test\\Demo1.java"));
		String data = null;
		while((data=br.readLine())!=null) {
			System.out.println(data);
			System.out.println();
		}
                br.close();
	} 
}

小练习

/*
      使用字符缓冲流完成文件的复制
*/
public class Demo {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("E:\\Administrator\\代码\\Java\\BigData1716N21\\src\\com\\qianfeng\\test\\Demo1.java"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("temp4.txt"));
		String data = null;
		while((data=br.readLine())!=null) {
			bw.write(data);
			bw.newLine();
		}
		br.close();
		bw.close();
	} 
}

LineNumberReader:是缓冲流,父类是BufferedReader,特有功能:设置行号,获取行号

public class Demo {
	public static void main(String[] args) throws IOException {
		LineNumberReader lnr = new LineNumberReader(new FileReader("E:\\Administrator\\代码\\Java\\BigData1716N21\\src\\com\\qianfeng\\test\\Demo1.java"));
		lnr.setLineNumber(5);
		//设置行号:默认行号是从0开始设置,从1开始计数
		//我们可以根据具体情况指定行号
		String data = null;
		while((data=lnr.readLine())!=null) {
			System.out.print(lnr.getLineNumber());
			System.out.print(data);
			System.out.println();			
		}
		lnr.close();;
	} 
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值