Java学习日志(18-2-IO流-文本文件读写操作)

Java IO流详解与实战
本文深入解析Java IO流的概念及分类,包括字节流与字符流、输入流与输出流,并通过具体示例演示如何使用FileWriter进行文件创建与刷新、如何实现文件续写,以及如何利用FileReader读取文本文件。

Input Output

    IO流用于处理设备之间的数据传输

    Java对数据的操作是通过流的方式

    Java用于操作流的对象都在IO包中

    流按操作数据分为字节流与字符流

    流按流向分为输入流与输出流

字节流的抽象基类

    InputStream OutputStream

字符流的抽象基类

    Reader Writer

文件创建刷新练习

/* 
字符流两个基类
InputStream	OutputStream
字符流两个基类
Reader	Writer

字符流特点
数据最常见体现形式:文件
以操作文件为主来演示

需求:在硬盘上创建一个文件并写入数据
找到一个专门用于操作文件的Writer子类对象-FileWriter
 */
 import java.io.*;
 class FileWriterDemo{
	 public static void main(String[] args)throws IOException{
		 // 创建一个FileWriter对象,已被初始化就必须要明确被操作的文件
		 //创建一个demo文本,明确数据存放的目的地
		 FileWriter fw=new FileWriter("demo.txt");
		 // 将字符写入流
		 fw.write("I Love XB");
		 // 刷新流对象中的数据-刷入目的地
		 fw.flush();
		 // fw.close();
		 //close关闭流资源,关闭前会将数据刷入目的地,之后不可继续使用
	 }
 }
 
 

IO异常处理方式

/* 
IO异常的处理方式
 */
import java.io.*;
class FileWriterDemo2{
	public static void main(String[] args){
		FileWriter fw=null;
		try{
			fw=new FileWriter("demo2.txt");
			fw.write("IloveXB");	
		}
		catch(IOException e){
			System.out.println(e.toString());
		}
		finally{
			/* 
			运行后必然关闭流,节约资源,因此放入finally
			close抛出异常因此需要处理 
			*/
			try{
				if(fw!=null){
					fw.close();	
				}
			}
			catch(IOException e){
				System.out.println(e.toString());
			}
		}
	}
}

文件的续写

/* 
文件的续写
 */
 import java.io.*;
 class FileWriterDemo3{
	 public static void main(String[] args){
		 FileWriter fw=null;
		 try{
			 //为true则续写,否则创建
			 fw=new FileWriter("demo.txt",true);
			 fw.write("\r\n+10086");
		 }
		 catch(IOException e){
			 System.out.println(e.toString());
		 }
		 finally{
			try{
				if(fw!=null){
					fw.close();
				}
			}
			catch(IOException e){
				System.out.println(e.toString());
			}
		 }
	 }
 }

文本文件读取方式一

import java.io.*;
class FileReaderDemo{
	public static void main(String[] args)throws Exception{
		/* 
		创建一个文件读取流对象,和指定名称的文件相关联
		必须保证文件存在,否则发生异常-FileNotFoundException 
		*/
		FileReader fr=new FileReader("demo.txt");
		// read():一次读一个字符,自动往下读,没有则返回-1
		int ch=0;
		while((ch=fr.read())!=-1){
			System.out.println("ch="+(char)ch);
		}
		
		/* while(true){
			int ch=fr.read();
			if(ch==-1){
				break;
			}
			System.out.println("ch="+(char)ch);
		} */
		fr.close();
	}
}

文本文件读取方式二

import java.io.*;
class FileReaderDemo2{
	public static void main(String[] args)throws Exception{
		FileReader fr=new FileReader("demo.txt");
		// 定义一个字符数组用于存储
		// 该read(char[])返回字符个数,长度通常定义为1024
		char[] buf=new char[1024];
		int num=0;
		while((num=fr.read(buf))!=-1){
			System.out.println("num="+num+"::"+new String(buf,0,num));
		}
		fr.close();
		
	}
}

读取练习

// 读取一个java文件,打印在控制台上
import java.io.*;
class FileReaderTest{
	public static void main(String[] args)throws Exception{
		FileReader fr=new FileReader("SystemDemo.java");
		char[] buf=new char[1024];
		int num=0;
		while((num=fr.read(buf))!=-1){
			System.out.println(new String(buf,0,num));
		}
		fr.close();
	}
}

拷贝文本文件

// 将C盘一个文本文件复制到D盘
/* 
原理:
	将C盘的文件储存到D盘
步骤:
	1.在D盘创建一个文件,用于存储C盘文件中的数据
	2.定于读取流和C盘文件的关联
	3.通过不断的读写完成数据的存储
	4.关闭流
 */
 import java.io.*;
 class CopyTest{
	 public static void main(String[] args){
		 
	 }
	 // 从C盘读一个字符就往D盘写一个字符
	 public static void copy_1()throws Exception{
		 // 创建目的地
		 FileWriter fw=new FileWriter("RuntimeDemo_copy.txt");
		 // 与已有文件关联
		 FileReader fr=new FileReader("RuntimeDemo.java");
		 int ch=0;
		 while((ch=fr.read())!=-1){
			 fw.write(ch);
		 }
		 fw.close();
		 fr.close();
	 }
	 public static void copy_2(){
		 FileWriter fw=null;
		 FileReader fr=null;
		 try{
			 fw=new FileWriter("SystemDemo_copy.txt");
			 fr=new FileReader("SystemDemo.java");
			 char[]buf=new char[1024];
			 int len=0;
			 while((len=fr.read(buf))!=-1){
				 fw.write(buf,0,len);
			 }
		 }
		 catch(IOException e){
			 throw new RuntimeException("读写失败");
		 }
		 finally{
			 if(fr!=null){
				 try{
					 fr.close();
				 }
				 catch(IOException e){
					 
				 }
			 }
			 if(fw!=null){
				 try{
					 fw.close();
				 }
				 catch(IOException e){
					 
				 }
			 }
		 }
	 }
 }

 

转载于:https://my.oschina.net/Almon/blog/748783

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值