--------------------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. Ubuntu ssh的使用

    1. 题外话:install teamviewer on Ubuntu. wget http://download.teamviewer.com/download/teamviewer_linux.d ...

  2. poj 1964 Cow Cycling(dp)

    /* 一开始想的二维的 只维护第几只牛还有圈数 后来发现每只牛的能量是跟随每个状态的 所以再加一维 f[i][j][k]表示第i只牛 领跑的j全 已经消耗了k体力 转移的话分两类 1.换一只牛领跑 那 ...

  3. grunt -- javascript自动化工具

    grunt 是一个基于npm,node.js 用js编写的工具框架,可以自动完成一些重复性的任务(如合并文件,语法检查,压缩代码), grunt拥有庞大的插件库,可以满足各种自动化批处理需求,常用的插 ...

  4. 数据库操作封装类 DBHelper.cs

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Co ...

  5. C# Gma.QrCodeNet生成二维码

    一.使用C#生成二维码类库之一是qrcodenet 源代码地址: http://qrcodenet.codeplex.com/ 二.使用实例 定义处理字符串 static string url = & ...

  6. 《CSS网站布局实录》学习笔记(五)

    第五章 CSS内容排版 5.1 文字排版 5.1.1 通栏排版 进行网页通栏排版时,只要直接将段落文字放置于p或者其他对象中,再对段落文字应用间距.行距.字号等样式控制,便形成了排版雏形. 5.1.2 ...

  7. MySQL导入导出命令

    前言 如果使用图形化界面,那么可以通过几个点击即可导入.导出.本文是假定你没有安装那些如Navicat等GUI管理软件. 场景 假设在电脑A和电脑B中都装有MySQL数据库管理系统,并且在电脑A的My ...

  8. java.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened because it does not exist

    解决办法: maven创建项目时: META-INF目录下面新建一个xfire文件夹,把services.xml文件放到这个文件夹里,再将整个META-INF拷贝到WEB-INF中 clean一下工程 ...

  9. RBAC角色权限控制

    RBAC角色权限控制 1. user (用户表) *  用户的基本信息(mid:用户信息id  如图) 2. node (节点表) * 页面(模块\控制器\方法) 3. role_node(角色.节点 ...

  10. 学习OpenSeadragon之一(一个显示多层图片的开源JS库)

    OpenSeadragon是一个可以显示多层图片(可放大缩小)的Web库,基于JavaScript,支持桌面和手机. 由于我项目需要,却没有找到任何中文教程,因此在官网上一边学习,一边总结于此. 官网 ...