黑马程序员——IO流的常用基本操作
来源:互联网 发布:php在线插件 编辑:程序博客网 时间:2024/05/22 05:18
—— android培训、java培训、期待与您交流! ——
IO流常用基本操作
io流用来处理设备之间的数据传输
java对数据的操作时通过流的方式(硬盘文件件,内存数据)
java用于操作流的对象都在io包中
流按照操作数据分为两种:字节流和字符流(早期是字节流)
流按照流向分为:输入流。输出流
字符流的由来:字符流的这些对象里边融合了编码表
只有文字涉及到编码。
字节流的两个抽象基类:
InputStream OutputStream
字符流的抽象基类:
Reader,Writer
注:有这个四个类派生的子类名称都是以其父类名作为子类名的后缀
如:InputStream的子类FileInputStream
如:Reader的子类FileReader.//前缀名是该流对象功能
字符流的特点:
IO流用于操作数据。
数据最常见体现形式是:文件
*Writer类演示*
演示操作文件
需求:硬盘上创建一个文件并写入一些数据
Writer/OutputStreamWriter/FileWriter:用来写入字符文件的操作类
没有空参数的构造函数(被创建就有要被操作的数据文件)
import java.io.*;class FileWriterDemo{ public static void main(String[] args) throws IOException { //创建一个FileWriter对象。该对象一被初始化,必须要明确被操作的文件 //而且该文件会被创建的指定目录下。如果该目录下已有同名文件,将被覆盖 //其实该步就是在明确数据要存放的目的地。 FileWriter fw=new FileWriter("demo.txt"); //调用Write方法,将字符串写入到流中 fw.write("abcde"); //刷新流对象中的缓冲中的数据 //将数据刷到目的地中。 fw.flush(); fw.write("你在说什么我真不知道啊"); fw.flush(); //关闭流资源、但是关闭之前会刷新一次内部的缓冲中的数据。 //将数据刷到目的地中。 //和flash的区别:falsh刷新后流可以继续使用,close刷新后可以将流关闭。 //调用claose,会调用flush先刷新一下。 fw.close(); //都涉及到了IO异常 }}
Io异常的处理方式。
思路:
FileWriter fw=new FileWriter(“demo.txt”);
fw.write(“abcde”);
fw.close()
这三部每一步都会发生异常
注意fw.close()一定要执行
所以放在finally中
并且它也会发生异常所以finally中在定义他的异常处理方式
注意fw初始化在外面,finally才能使用他
finally才能使用他时候要判断fw不为null
示例如下:
import java.io.*;class FileWriterDemo2 { public static void main(String[] args) { FileWriter fw=null; try { fw=new FileWriter("demo.txt"); //fw=newFileWriter("k:\\demo.txt"); //java.io.FileNotFoundException: fw.write("abcde"); //这是IO异常的子类 //fw.close();关流动作一定要执行 放在finally当中 } catch (IOException e) { System.out.println("catch:="+e.toString()); } finally { 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) //throws IOException { FileWriter fw=null; try { //传递一个true参数,代表不覆盖已有的文件 //并在已有的文件末尾处进行数据续写 fw=new FileWriter("demo.txt",true); //fw.write("原来是这样的情况"); //在之前文字末尾处。没有换行 fw.write("\r\nhello,word\r\n换到下一行"); //"\r\n"在txt文件中会判断为换行 } catch (IOException e) { System.out.println("catch:="+e.toString()); } finally { try { if(fw!=null) fw.close(); } catch (IOException e) { System.out.println(e.toString()); } } }}
*Reader类演示*
public class FileReader:用来读取字符文件的便捷类。
- - - - -extends InputStreamReader
读取单个字符示例:
import java.io.*;class FileReadDemo{ public static void main(String[] args) //throws IOException { FileReader fr=null; try { //创建一个文件读取流对象,和指定名称的文件相关联。 //要保证该文件已经存在,如果不曾在,会发生FileNontFoundException fr=new FileReader("demo.txt"); //调用读取流对象的Read方法,读单个字符 //将字符读入数组或读入数组的某一部分,试图将字符读入字符缓冲区 //int ch1=fr.read(); //System.out.println("ch="+ch1);//注意:打印的是该字符的ascII值 //如果达到流的末尾为返回-1; /*while(true) { int ch=fr.read(); if(ch==-1) break; System.out.println("ch="+(char)ch); } */ int ch=0; while((ch=fr.read())!=-1) { System.out.println("ch="+(char)ch); } } catch (IOException e) { System.out.println("catch="+e.toString());//抛出异常 } finally { if(fr!=null) try { fr.close(); } catch (IOException e) { System.out.println(e.toString());//抛出异常 } } }}
显示在控制台的结果:换行符打印,但没有显示字符
第二种方式:将字符读入数组
import java.io.*;class FileReadDemo2{ public static void main(String[] args) //throws IOException { FileReader fr=null; try { fr=new FileReader("demo.txt"); char[] buf=new char[3]; //int num=fr.read(buf);//read(char[])返回获取数组字符的长度 int num=0; while((num=fr.read(buf))!=-1) { System.out.println(new String(buf,0,num)); } System.out.println("num="+num+"..."+new String(buf)); } catch (IOException e) { System.out.println("catch="+e.toString());//抛出异常 } finally { if(fr!=null) try { fr.close(); } catch (IOException e) { System.out.println(e.toString());//抛出异常 } } }}
打印在控制台的结果:
将指定文件打印在控制台:
import java.io.*;class FileReadDemo3 { public static void main(String[] args) { FileReader t=null; try { t=new FileReader("DateDemo.java"); char[] in=new char[1024]; //数组in占用1024个字节的内存,最长可以保存长度是1023的字符串 int ch=0; while((ch=t.read(in))!=-1) { System.out.println(new String(in,0,ch)); } } catch (IOException e) { System.out.println(e.toString()); } finally { if(t!=null); try { t.close(); } catch (IOException e) { System.out.println(e.toString()); } } }}
需求:将D盘文件复制到c盘.
复制的原理
是将c盘下的文件数据存储到d盘的文件中
步骤:
1,在D盘创建一个文件
2,定义一个读取流和c盘文件关联
3.通过不断的读写完成数据存储
4.关闭资源
代码如下:
import java.io.*;class FileReadDemo4 { public static void main(String[] args) throws IOException { copy_2(); } public static void copy_2() throws IOException { FileWriter fw=null; FileReader fr=null; try { fw=new FileWriter("c:\\DateDemo_copy.txt"); fr=new FileReader("demo.txt"); char[] buf=new char[1024];//定义一个数组做缓冲区 //int num=fr.read(buf);//read(char[])返回获取数组字符的长度 int len=0; while((len=fr.read(buf))!=-1) { fw.write(buf,0,len);//每读一次,往缓冲区数据存一次 //System.out.println(new String(buf,0,num)); } //System.out.println("num="+num+"..."+new String(buf)); } catch (IOException e) { throw new RuntimeException("读写数据失败"); //System.out.println("catch="+e.toString());//抛出异常 } finally { //多重流要分开try if(fr!=null) try { fr.close(); } catch (IOException e) { System.out.println(e.toString());//抛出异常 } if(fw!=null) try { fw.close(); } catch (IOException e) { System.out.println(e.toString());//抛出异常 } } } //从c盘读取一个字符,然后往D盘读写一个字符 public static void copy_1() throws IOException { //创建目的地 FileWriter fw=new FileWriter("DateDemo_copy.txt"); //与已有的文件关联 FileReader fr=new FileReader("DateDemo.java"); int ch=0; while((ch=fr.read())!=-1)//读一次 { fw.write(ch);//写一次 } fw.close(); fr.close(); }}
- 黑马程序员——IO流的常用基本操作
- 黑马程序员——【Java】IO——操作基本数据类型的流:DataInputStream & DataOutputStream
- 黑马程序员————IO流操作的基本规律和使用方法
- 黑马程序员 IO流 流操作的基本规律
- IO流的基本操作思路----黑马程序员
- 黑马程序员——IO流的基本技巧
- 黑马程序员--基本IO操作
- 黑马程序员——IO流操作
- 黑马程序员—IO操作
- 黑马程序员——java的IO之流操作的基本规律,Properties类,打印流,序列流
- 黑马程序员-最基本的io操作练习
- 黑马程序员_<<IO流基本操作(Writer,Reader)>>
- 《黑马程序员》java IO流基本操作(1)
- 《黑马程序员》java IO流 基本操作(2)
- 《黑马程序员》java IO流基本操作(3)
- 黑马程序员—IO操作(1)
- 黑马程序员——常用IO输入输出流
- 黑马程序员---IO(Input Output)流(键盘录入、流操作的基本规律)
- 217.Contains Duplicate(判断一个数组是否有重复数出现)
- Tomcat乱码解决方法
- Windows 10: 命令行可以直接使用Ctrl+C和Ctrl+V了
- Scala中迭代器Iterator使用
- JQuery EasyUI只显示年月,而不显示日
- 黑马程序员——IO流的常用基本操作
- 自定义AlterDialog( 自定义仿IOS的AlertDialog的样式)
- Redis教程2--Redis数据类型及相关命令
- 转发与重定向的区别
- 分页小改进
- STL具体操作之优先队列
- 122 Best Time to Buy and Sell Stock II
- ESRI的Shapefile文件向Google Earth中KML文件的格式转换
- Spark streaming 初探