--------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------

1.概述

硬盘之间的文件的传输,硬盘中文件的操作,他们之间的操作都是需要流进行操作的,对数据的操作是通过流进行操作的。

对流操作的类型进行分类:字节流和字符流

按流的流向分为:输入流和输出流

字符流是基本流,操作的二进制数据,可以对文本文件进行操作,要是操作图片,那么用字符流

他们的基类:

字节流类:InputStream 和OutputStream

字符流:Reader和Writer

2.  FileWriter

此流是输入流,写入流,当文件中写入信息。

1.基本操作

 import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer; public class WriterDemo {
public static void main(String [] agrs) throws IOException{
/*利用构造方法指定文件的地址 FileWriter(String fileName)
* 1.当此时路径下已经存在此文件,那么就会覆盖此文件,
* 如果不存在此文件,那么就会在当前路径下创建此文件
* 2.如果你的路径写错了,就不当前硬盘下或者说电脑下,没有此应该或者是此目录,那么就是报异常
* 例如:你电脑下不存在K盘,你写的路径是new FileWriter("K:\\demo.txt")那么就会报异常
* 例如你电脑上存在F盘,但是不存在dd文件夹,你写new FileWriter("F:\\dd\\demo.txt")也会报异常*/
Writerwriter=new FileWriter("F:\\demo.txt");
/*当创建好文件后,想里面写数据,利用write()方法,有很多重载方法*/
writer.write("hello");
/*调用了方法write后,只是把数据写到了缓冲流中,必须使用flush()方法来刷新缓冲
* 当你写完毕后,也可以调用close()方法,此方法会关闭流,在关闭之间就自动刷新了该缓冲,关闭后,就不能利用此流继续写了
* 但是你使用flush()方法,还可以使用此流继续写,这也是close()和flush()的区别*/
writer.flush();
writer.close();
}
}

结果:创建了指定的文件,也写入了写入的数据。

2.异常处理格式

 import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer; public class WriterDemo {
public static void main(String[] agrs) {
/* 先声明流对象,实例的时候可能会报异常,那么就捕获 */
FileWriter writer = null; try {
writer = new FileWriter("F:\\demo.txt");
writer.write("hello");
writer.flush();
} catch (Exception e) {
System.out.println(e.toString());
} finally {
/*
* 在finally中关闭流,这样不管前面是否出现异常,此流必须关闭,加入流创建了,那么就关闭,加入没有创建就不需要关闭,
* 所以要先判断一下
*/ try {
if (writer != null)
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

3.对已存在的文件进行续写

 import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer; public class WriterDemo {
public static void main(String[] agrs) {
/* 先声明流对象,实例的时候可能会报异常,那么就捕获 */
FileWriter writer = null;
/*对已有文件进行续写,在构造方法中有个执行是否是续写的参数,
* FileWriter(String fileName,boolean append)
* append是true写到尾部,当为false,表示重新写入
*
*
* 在这说明一下换行,window的记事本上\r\n表示换行,如果只写\n不换行
* 由于软件不同,换行的标志也不一样,有的软件\n就表示换行
*/
try {
writer = new FileWriter("F:\\demo.txt",true);
writer.write("\r\nworld");
writer.flush();
} catch (Exception e) {
System.out.println(e.toString());
} finally {
try {
if (writer != null)
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

结果:

在文件中续写了,并且换行了

3. FileReader

读取文件,当读取文件的时候,必须指定文件的路径,如果路径不正确,那么会报异常,有i自己默认额编码方式,和java的虚拟机默认的编码一样,一般是gbk。

1. 单个读取

  import java.io.FileReader;
import java.io.IOException; public class ReaderDemo {
public static void main(String[] agrs) {
FileReader fr = null;
try {
fr = new FileReader("F:\\demo.txt");
/*
* 使用 read()单个读取文件,当读取当最后的时候返回-1,否则返回的是字符对应的ASCII码,我们要转换字符
*/
int r = -1;
while ((r = fr.read()) != -1) {
System.out.print((char) r);
}
} catch (IOException e) {
System.out.println(e.toString());
} finally {
try {
if (fr != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
}

2.     数组读取

public class ReaderDemo {
public static void main(String[] agrs) {
FileReader fr = null;
try {
fr = new FileReader("F:\\demo.txt");
/*
* 使用 read(char[] cbuf)读取的是到数组中,然后的是读取的到字符的个数,当去读到最后的返回的是-1
*/
int len= -1;
/*在定义数组长度的时候,一般是1024的倍数,在这个为了测试,写3*/
char [] cs=new char[3];
while ((len= fr.read(cs)) != -1) {
/*在读取到字符数组的数组,转换为字符串,读取了多少字符,我们就转换多少,这个长度是不固定的
* 如果固定的话,那么读取出来的会多的,例如:
* 文件中的字符是abcdefg
* 第一次读取:abc 数组中的信息是: a b c
* 第二次读取:def 数组中的信息是: d e f
* 第三次读取:g 数组中的信息是: g e f
* 但是第三次返回的长度是1.所以我们值把g转换为字符串即可
* */
System.out.print(new String(cs,0,len));
}
} catch (IOException e) {
System.out.println(e.toString());
} finally {
try {
if (fr != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
}

4. 文件复制

思路:

定义两个流:读和写,分别指向文件要读取的文件和复制到的文件地址,可以边读取变写入到另一个文件中,也可以都读取出来,然后一起写入到另一个文件。

1.单个复制

 import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class ReaderDemo {
public static void main(String[] agrs) {
FileWriter fw = null;
FileReader fr = null;
try {
fr = new FileReader("F:\\A\\demo.txt");//定义读取对象,读取要复制的文件
fw = new FileWriter("F:\\B\\demo.txt");//定义写入对象,写到目的文件
int r = -1;
while ((r = fr.read()) != -1) {//读取
fw.write(r);//写入
fw.flush();//刷新
}
} catch (IOException e) {
System.out.println(e.toString());
} finally {
try {
if (fr != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fw != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
}

2. 数组复制

 import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class ReaderDemo {
public static void main(String[] agrs) {
FileWriter fw = null;
FileReader fr = null;
try {
fr = new FileReader("F:\\A\\demo.txt");// 定义读取对象,读取要复制的文件
fw = new FileWriter("F:\\B\\demo.txt");// 定义写入对象,写到目的文件
int len = -1;
char[] cs = new char[1024];//字符数组
while ((len = fr.read(cs)) != -1) {// 读取
fw.write(cs,0, len);// 写入
fw.flush();// 刷新
}
} catch (IOExceptione) {
System.out.println(e.toString());
} finally {
try {
if (fr != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fw != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
}

--------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------

黑马程序员_<<IO流基本操作(Writer,Reader)>>的更多相关文章

  1. 黑马程序员_<<String类>>

    --------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1. String类 1.概述 String ...

  2. 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17

    黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目 ...

  3. 2016年8月17日 内省(1)18_黑马程序员_使用beanUtils操纵javabean

    8.内省(1):18_黑马程序员_使用beanUtils操纵javabean 1.导入两个包: 2.调用静态方法. 9.泛型 map.entrySet() :取出map集合的键值对组成一个set集合. ...

  4. 黑马程序员_高新技术之javaBean,注解,类加载器

    ----------- android培训.java培训.java学习型技术博客.期待与您交流! ---------- 第一部分 javaBean 一,由内省引出javaBean 1,内省: 内省对应 ...

  5. JavaWeb开发之四:servlet技术 黑马程序员_轻松掌握JavaWeb开发之四Servlet开发 方立勋老师视频教程相当的经典

    总结: 记住:servlet对象在应用程序运行的过程中只创建一次,浏览器每次访问的时候,创建reponse对象 request对象,然后调用servlet的service方法,reponse对象和re ...

  6. 黑马程序员_ JAVA中的多线程

    ------- android培训.java培训.期待与您交流! ---------- 尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的. 本来打算用一节 ...

  7. 黑马程序员_ Objective-c 面向对象笔记详解

    1)类,对象,方法 类 类名: 1) 类名的第一个字母必须是大写 2) 不能有下划线 3) 多个英文单词,用驼峰标识 类的声明和实现 类的声明 @interface 类名 : NSObject { @ ...

  8. 黑马程序员_ Objective-c 概述及面向对象与三大特性

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ (一).语法概述 1. oc介绍:(.m文件) 1> c语言的基础上,增加 ...

  9. 黑马程序员_ Objective-c 之block、protocol学习笔记

    一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值, ...

  10. 黑马程序员——OC语言 类和对象

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)类 1)类的声明 代码编写 ①定义一个Car类,拥有2个属性:轮子数 ...

随机推荐

  1. c#中WebBrowser控件的使用方法

    首先先来简单介绍一下webbrowser控件,这个控件是可以实现在form窗体中添加网页内容的.如图,我在form中加入了百度api,(百度地图api调用博客里有讲) 使用这个控件其实很简单 (1)第 ...

  2. Citrix Presentation server can not contact the license server

    If you come across the above error,  you may also come across one or more of the errors below within ...

  3. 源码搭建lnmp平台

    lnmp平台是指利用linux操作系统,nginx服务器,mysql数据库和php语言搭建高性能web服务器,负载均衡器和邮件代理服务器. 原理图:‘

  4. git变基、冲突解决

    参考git rebase 版本..变基 git冲突解决先fetch,pull,如果文件冲突,手动处理冲突文件,然后再fetch,pull,发现拉不下来,这时需要将文件改为已合并,然后提交文件 具体操作 ...

  5. .Net程序员 Solr-5.3之旅 (三)Solr 从MSSQ导入索引数据

    阅读目录 引言 准备工作 data-config.xml schema.xml 导入数据 结尾 附件下载 引言 Other men live to eat, while I eat to live.- ...

  6. asp.net中应用JQuery.pagination分页

    JQuery.pagination这款分页控件非常好用,可实现无刷新分页,为了方便下次做项目便于拷贝,所以在此发布一下,具体的实现流程如下: 效果图: JQuery.pagination的各个参数的说 ...

  7. ON DUPLICATE KEY UPDATE 当记录不存在时插入,当记录存在时更新

    MySQL 当记录不存在时插入,当记录存在时更新网上基本有三种解决方法.第一种:示例一:插入多条记录假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:INSERTINT ...

  8. 带左右箭头切换的自动滚动图片JS特效

    效果图 按钮 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  9. String的format方法

    摘自:http://xiongzhenhui.iteye.com/blog/940416 http://blueram.iteye.com/blog/441683 一.常规类型.字符类型和数值类型的格 ...

  10. JavaScript 本地对象、内置对象、宿主对象

    首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. ...