黑马程序员——IO流(一)
来源:互联网 发布:淘宝领券怎么领取 编辑:程序博客网 时间:2024/06/06 01:01
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
-IO流的有关类
字节流:InputStream, OutputStream
FileInputStream, FileOutputStream // BufferedInputStream, BufferedOutputStream
PrintWriter类:向文本输出流打印对象的格式化表示形式。此类实现在
PrintStream
中的所有print 方法。它不包含用于写入原始字 节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。
字符流:Reader, Writer
FileReader, FileWriter // BufferedReader, BufferedWriter
转换流:InputStreamReader, OutputStreamWriter
-学习FileWriter
package day18_IO;import java.io.FileWriter;import java.io.IOException;/** * 学习FileWriter,注意异常产生的原因和正确关闭资源的书写方法 * @author Administrator */public class Day18_08_IOException {public static void main(String[] args) {//在 代码块 外部建立用,代码块内部实例化创建FileWriter fw = null;try {fw = new FileWriter("demo.txt");fw.write("aaaaa");} catch (IOException e) {//e.printStackTrace();System.out.println("catch: "+e.toString());} finally {if(fw!=null)try {fw.close();} catch (IOException e) {//e.printStackTrace();System.out.println("catch: "+e.toString());throw new RuntimeException("写入资源关闭失败");}}}}
FileWriter的常用方法:fw.writer(); fw.flush(); fw.close();
注意点:1、一创建FileWriter对象就要指定要操作的源(默认覆盖已存在同名的文件)
2、为什么要flush方法,与close方法有什么区别。
3、文件的续写(不覆盖) FileWriter fw = new FileWriter("文件名",true);,换行\r\n
4、换行:Windows系统下(\r\n);Linux系统下(\n)
-学习FileReader
文件读取方式一:
FileReader fr = new FileReader("demo.txt");
int ch = 0;
//read()方法一次读一个字符,而且会自动往下读
while((ch= fr.read())!=-1){
System.out.print((char)ch);//强转为字符型输出
}
文件读取方式二:
FileReader fr = new FileReader("demo.txt");
//定义一个字符数组
char[] cbuf = new char[1024];
int count = 0;
while((count=fr.read(cbuf))!=-1){
System.out.println(new String(cbuf,0,count));
}
-有关FileWriter 和 FileReader 操作的练习
package day18_IO;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/** * 通过copy练习,熟悉IO流中FileWriter与FileReader类的写法操作 * @author Administrator */public class Day18_13_CopyPractice2 {static FileWriter fw = null;static FileReader fr = null;public static void main(String[] args) {//copy_1();copy_2();}//读一个字符,复制一个字符public static void copy_1(){try {fw = new FileWriter("copydemo.txt");fr = new FileReader("demo.txt");int ch = 0;while((ch=fr.read())!=-1){fw.write(ch);}System.out.println("复制成功");} catch (Exception e) {e.printStackTrace();System.out.println("复制失败");} finally {colseResource();}}//通过字符数组进行复制public static void copy_2(){try {fw = new FileWriter("copydemo2.txt");fr = new FileReader("demo.txt");char[] buf = new char[1024];int len = 0;while((len=fr.read(buf))!=-1){fw.write(buf,0,len);}System.out.println("复制成功");} catch (IOException e) {System.out.println("复制失败");e.printStackTrace();} finally {colseResource();}}//释放资源private static void colseResource() {if(fr!=null){try {fr.close();} catch (IOException e) {e.printStackTrace();}}if(fw!=null){try {fw.close();} catch (IOException e) {e.printStackTrace();}}}}
特有方法:newLine(); readLine();
注意:1、readLine()方法返回类型为字符串String类型,read()方法返回的是整数类型。
2、readLine()方法的返回值并不包含末尾的换行符。
-通过缓冲区技术实现对文本文件的复制
package day19_IO;import java.io.*;/** * 通过缓冲区技术实现对文本文件的复制 * * @author Administrator * */public class Day19_03_CopyByBuffered {public static void main(String[] args) {BufferedWriter bw = null;BufferedReader br = null;try {bw = new BufferedWriter(new FileWriter("bufferedCopy.txt"));br = new BufferedReader(new FileReader("demo.txt"));String line = null;while((line=br.readLine())!=null){bw.write(line);bw.newLine();//bw.flush();}System.out.println("文件复制成功....");} catch (IOException e) {e.printStackTrace();} finally {//释放资源try {if(br!=null)br.close();} catch (IOException e) {e.printStackTrace();}try {if(bw!=null)bw.close();} catch (IOException e) {e.printStackTrace();}}}}
-自定义MyBufferedReader类
package day19_IO;import java.io.FileReader;import java.io.IOException;/** * 通过理解BuffereReader类中的方法readLine(),学习自己创建一个MyBufferedReader * @author Administrator * */public class Day19_05_MyBufferedReader {private FileReader fr;public void MyBufferedReader(FileReader fr){this.fr = fr;}public String myBufferedReader() throws IOException{//定义一个临时容器,源BufferedReader封装的是字符数组//因为最终还是要将数据转换为字符串,我们这里就定义一个StringBuilder容器StringBuilder sb = new StringBuilder();int ch = 0;while((ch=fr.read())!=-1){if(ch=='\r')continue;if(ch=='\n')return sb.toString();else sb.append((char)ch);//先强转为字符型}//防止末尾没有换行符,这里我们需要再做一个判断if(sb.length()!=0)return sb.toString();return null;}//为MyBufferedReader 同样添加一个关闭资源的方法public void myClose() throws IOException{fr.close();}}
-LineNumberReader类
跟踪行号的缓冲字符输入流。此类定义了方法
setLineNumber(int)
和getLineNumber()
,它们可分别用于设置和获取当前行号。默认情况下,行编号从 0 开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用
setLineNumber(int)
更改行号。但要注意的是,setLineNumber(int)
不会实际更改流中的当前位置;它只更改将由getLineNumber() 返回的值。可认为行在遇到以下符号之一时结束:换行符('\n')、回车符('\r')、回车后紧跟换行符。
package day19_IO;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.LineNumberReader;/** * 学习LineNumberReader类 * 练习:模拟创建一个带行号的缓冲区对象。 * @author Administrator * */public class Day19_09_LineNumberReader {public static void main(String[] args) {FileReader fr = null;LineNumberReader lnr = null;try {fr = new FileReader("demo.txt");lnr = new LineNumberReader(fr);String line = null;//可以自己设定开始行号//lnr.setLineNumber(100);while((line=lnr.readLine())!=null){System.out.println(lnr.getLineNumber()+": "+line);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
- 黑马程序员——io流(一)字符流
- 黑马程序员——IO流(一)
- 黑马程序员——IO流(一)
- 黑马程序员——IO(Input Output)流(一)
- 黑马程序员——JAVA基础-IO流(一)
- 黑马程序员——Java IO流(一)
- 黑马程序员——IO流(一)
- 黑马程序员——IO流(一)
- 黑马程序员——IO流总结(一)
- 黑马程序员——IO流(一)
- 黑马程序员——IO流(一)
- 黑马程序员——IO流(一)
- 黑马程序员——IO流(一)
- 黑马程序员——Java基础--IO流(一)
- 黑马程序员——IO流(一)
- 黑马程序员——Java基础--------IO流(一)
- 黑马程序员——JAVA基础----IO流(一)
- 黑马程序员——java---IO(一)
- 向android进发 :(二)设置SDK Manager
- fjfjjffjddd
- XListView 使用笔记
- 压敏电阻
- CvTHaarFeature和CvFastHaarFeature以及CvIntHaarFeatures的区别
- 黑马程序员——IO流(一)
- ios中的block
- libevent使用(一)-----基础配置
- 利用jsoncpp库处理json格式数据
- 二、在Eclipse中体验Date日期类
- XE8 (RTM) Android SDK 更新安装,xe8android
- ios_swift开发资源整理
- 服务器备份工具
- TCP的拥塞控制