Java复习篇——IO流

IO流概念:

在Java IO中,流是一个核心的概念。流从概念上来说是一个连续的数据流。你既可以从流中读取数据,也可以往流中写数据。流与数据源或者数据流向的媒介相关联。在Java IO中流既可以是字节流(以字节为单位进行读写),也可以是字符流(以字符为单位进行读写)。

Java中IO流的架构图

Java复习篇——IO流_第1张图片

IO流的基本用法

字节流

//用字节流写文件 OutPutStream
	public static void writeByteToFile() throws IOException{
		String hello = new String ("Hello World!");
		byte[] byteArry = hello.getBytes();
		File file = new File("D:/IO/hello.txt");
		OutputStream os = new FileOutputStream(file);
		os.write(byteArry);
		os.close();
	}
	
	//用字节流读文件 InputStream
	public static void readByteToFile() throws IOException{
		File file = new File("D:/IO/hello.txt");
		byte[] byteArray = new byte[(int)file.length()];
		InputStream is= new FileInputStream(file);
		int size = is.read(byteArray);
		System. out.println( "大小:"+size +";内容:" +new String(byteArray));
        is.close();
	}

字符流

//字符流写文件
	public static void WriterToFile() throws IOException{
		String hello = new String ("Hello World!");
		File file = new File("D:/IO/create.txt");
		Writer w = new FileWriter(file);
		w.write(hello);
		w.close();
	}
	
	//字节流读取文件
	public static void ReaderToFile() throws IOException{
		File file = new File("D:/IO/create.txt");
		Reader r = new FileReader(file);
		char[] byteArray = new char[(int)file.length()];
		int size = r.read(byteArray);
		System. out.println( "大小:"+size +";内容:" +new String(byteArray));
        r.close();
	}

字节流转换字符流

字节流可以转换成字符流,java.io包中提供的InputStreamReader类就可以实现

public static void convertByteToChar() throws IOException{
        File file= new File( "d:/test.txt");
         //获得一个字节流
        InputStream is= new FileInputStream( file);
         //把字节流转换为字符流,其实就是把字符流和字节流组合的结果。
        Reader reader= new InputStreamReader( is);
         char [] byteArray= new char[( int) file.length()];
         int size= reader.read( byteArray);
        System. out.println( "大小:"+size +";内容:" +new String(byteArray));
         is.close();
         reader.close();
  }

File媒介的使用

public static void AstoFile() throws IOException{
		//锁定目录
		File file = new File("D:/IO/File");
		if(file.exists()) {
			//文件存在
			//删除文件以及所有父目录
			file.delete();
		}
		
		//创建文件夹,包含必须但不存在的父目录
		file.mkdir();
		File filetxt = new File("D:/IO/File/create.txt");
		//创建文件
		filetxt.createNewFile();
		//重命名文件
		filetxt.renameTo(new File("D:/IO/FILE/txt.txt"));
		//判断是否是目录
		System.out.println(file.isDirectory() + "-------" + filetxt.isDirectory());
		//写入内容
		String txt = "张三李四王五";
		OutputStream os = new FileOutputStream(filetxt);
		byte[] byteTo = txt.getBytes();
		os.write(byteTo);
		os.close();
		
		
	}

随机读取和写入FIle文件

//随机读取
	public static void randomAccessFileRead() throws IOException{
		//创建RandomAccessFile对象
		RandomAccessFile file = new RandomAccessFile("D:/IO/File/txt.txt", "rw");
		//通过seek方法移动读写位置
		file.seek(10);
		//获取当前指针
		long begin = file.getFilePointer();
		//从当前指针的下一个开始读 
		byte[] contents = new byte[1024];
		file.read(contents);
		
		//输出
		System.out.println(begin+" ---" + begin + "------" + new String(contents));
		file.close();
	}
	
	//随机写入
	//注:如果写入位置由10开始:后面原有的字符会被覆盖掉
	public static void randomAccessFileWrite() throws IOException{
		//创建RandomAccessFile对象
		RandomAccessFile file = new RandomAccessFile("D:/IO/File/create.txt","rw");
		//通过seek方法移动读写位置
		file.seek(10);
		//获取当前指针
		long begin = file.getFilePointer();
		file.write("Hello World!".getBytes());
		System.out.println(begin);
	}

字节缓冲区读写数据 BufferedInputStream 和 BufferedOutputStream

缓冲区读写概念 :BufferedInputStream顾名思义,就是在对流进行写入时提供一个buffer来提高IO效率。在进行磁盘或网络IO时,原始的InputStream对数据读取的过程都是一个字节一个字节操作的,而BufferedInputStream在其内部提供了一个buffer,在读数据时,会一次读取一大块数据到buffer中,这样比单字节的操作效率要高的多,特别是进程磁盘IO和对大量数据进行读写的时候。

public static void main(String[] args) throws IOException {
		BufferedInputStreamEnd();
		BufferedOutputStreamEnd();
	}
	
	//字节流缓冲区读取数据
	public static void BufferedInputStreamEnd() throws IOException {
        File file = new File("D:/IO/create.txt");
         byte[] byteArray = new byte[( int) file.length()];
         //可以在构造参数中传入buffer大小
        InputStream is = new BufferedInputStream(new FileInputStream(file),2*1024);
         int size = is.read(byteArray);
        System. out.println("大小:" + size + ";内容:" + new String(byteArray));
         is.close();
  }
	
	//字节流缓冲区写入数据
	public static void BufferedOutputStreamEnd() throws IOException{
		File file = new File("D:/IO/create.txt");
		String txt = new String ("123123123");
		OutputStream  os = new BufferedOutputStream(new FileOutputStream(file));
		os.write(txt.getBytes());
		os.close();
	}

字符缓冲区读写数据 BufferedReaderStream 和 BufferedWriterStream

public static void main(String[] args) throws IOException {
		BufferedWriterEnd();
		BufferedReaderEed();
	}

	//字符流缓冲区读取数据
	public static void BufferedReaderEed() throws IOException {
        File file = new File("D:/IO/create.txt");
         // 在字符流基础上用buffer,也可以指定buffer的大小
        Reader reader = new BufferedReader(new FileReader(file),2*1024);
         char[] byteArray = new char[(int) file.length()];
         int size = reader.read(byteArray);
        System.out.println("大小:" + size + ";内容:" + new String(byteArray));
         reader.close();
	}
	
	//字符流缓冲区写入数据
	public static void BufferedWriterEnd() throws IOException{
		File file = new File("D:/IO/create.txt");
		Writer writer = new BufferedWriter(new FileWriter(file));
		String s = new String("字符流缓冲区写入数据");
		writer.write(s);
		writer.close();
	}

你可能感兴趣的:(Java基础)