IO学习笔记(一)

一、对文件的写操作

1.  FileWriter对象

FileWriter  fw = new FileWriter("XXX");

只要对文件进行IO操作,就会有IOException异常。

创建一个FileWriter对象,该对象一初始化,必须要明确要操作的文件。

而且如果在该目录下如果存在与指定文件同名的文件,那么同名文件将被覆盖。

在用FileWriter对象写文件的时候,数据是被写到了缓冲中,所以要flush()。

当我们调用flush()方法时,FileWriter对象没有被关闭,我们可以继续向其中写数据。

调用FileWriter对象的close()方法前,会默认的自动调用flush()方法,但是调用close()方法后,将不能再进行写操作。

2.   对IO操作的异常的处理方式

 在try外创建引用,在try内进行初始化,对FileWriter对象的关闭要在finally中执行,并且要加入不等于空的判断,防止文件找不到异常。

3.   利用FileWriter进行文件的续写

查阅JDK后我们发现在FileWriter的构造函数FileWriter(String fileName, boolean append) 对文件的续写给予了支持。

在文件续写时要注意的一个问题是:在Windows下的换行 \r\n  在linux下为\n

二、对文件的读操作

4.   FileReader对象

FileReader fr = new FileReader("XXX");

fr.read();一个字符一个字符的读取即读取单个字符,每次返回的是一个字符,但是整形的,需要我们强制的转换成char。

fr.read(c);------read(char[] cbuf)   将读到的字符放入数组

fr.read(c,0,len);------read(char[] cbuf, int off, int len) 将字符读入数组的某一部分

读到文件的末尾会返回-1

5.   文件的拷贝(简写)

FileWriter fw = new FileWriter("xxx");

FileReader fr = new FileReader("xxxx");

char[] buf = new char[1024];
int len = 0 ;

while ((len = fr.read(buf))) {

      fw.write(buf,0,len);

}
fw.close();

fr.close();

6.   BufferWriter---BufferedReader

缓冲区的出现是为了提高流的操作效率,在缓冲区创建之前必须有流对象

BufferedWriter(Writer out)

BufferedWriter(Writer out, int sz)

BufferedWriter中多了一个newLine()的方法。

BufferedReader中出现了一个新的方法,readLine(),一次读一行的方法包含改行内容的字符串,不包含任何行终止符,如果已到达流的末尾,则返回null.

BufferedReader(Reader in)
BufferedReader(Reader in, int sz)

文件拷贝实现-----(一)

BufferedWriter bufw = new BufferedWriter(new FileWriter("D:\\a.txt"));

BufferedReader bufr = new BufferedReader(new FileReader("d:\\copy.txt"));
String str = null;
while ((str = bufr.readLine()) != null) {
      bufw.write(str);
      bufw.newLine();
      bufw.flush();
}

文件拷贝实现-----(二)

FileWriter fw = new FileWriter("A.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("aaaaaaaccc");
bufw.flush();

7.  readLine()方法的实现原理



8.  装饰设计模式的应用
当已有类的方法不能满足我们的需求的时候,我们可以采用装饰设计模式来对我们已有的对象进行增强,这里要注意是对对象的增强,如何对对象进行增强呢?我们可以定义一个新的类,然后在这个类中通过构造方法中传入原来的对象,基于已有的功能,并提供加强功能,那么自定义的类称为装饰类。在IO操作中,BufferedWriter 就是采用了装饰设计模式。


9.  FileInputStream FileOutputStream 

采用字节的方式对文件进行操作,在对图片、声音、视频等文件操作的时候就必须采用字节的方式对文件进行读取。其操作与字符流的操作基本一致,只是中间存放数据的数组发生了变化,由原来的字符数组变成了字节数组。

FileInputStream fi = new FileInputStream("D:\\1.jpg");
FileOutputStream fo = new FileOutputStream("D:\\2.jpg");
        byte[] b = new byte[1024];
int len = 0;
while ((len=fi.read(b))!=-1) 
{
fo.write(b,0,len);
}

10.  BufferedInputStream(InputStream in)   BufferedOutputStream(OutputStream out)

实现缓冲的输入输出流,与字符缓冲的输入输出流类似,都是在底层实现了数组,所以我们在使用的时候也不需要字节手动去创建字节数组,直接用就可以。

FileInputStream fi = new FileInputStream("D:\\1.jpg");
FileOutputStream fo = new FileOutputStream("D:\\2.jpg");
        BufferedOutputStream bufo = new BufferedOutputStream(fo);
BufferedInputStream bufi = new BufferedInputStream(fi);
int len = 0;
while ((len=bufi.read())!=-1) 
{
bufo.write(len);
}

时间: 2024-09-29 10:13:02

IO学习笔记(一)的相关文章

IO学习笔记(二)

11.  IO实现读取键盘录入  与   字符流和字节流的转换 System.out标准的输出 System.in标准的输入           static InputStream  in OutputStreamWriter(OutputStream out)  OutputStreamWriter(OutputStream out, String charsetName)        创建使用指定字符集的 OutputStreamWriter OutputStreamWriter 是字符

IO学习笔记(三)

13.  File 类 它既能代表一个文件的名称,又能代表一个目录下一组文件的名称.常用于对文件或文件夹的操作. File对象也可以作为参数传递给流的构造函数. File(File parent,String child)   根据 parent 抽象路径名和 child 路径名字符串创建一个新File 实例 File(String pathname)    通过将给定路径名字符串转换为抽象路径名来创建一个新File 实例. File(String parent,String child)   

new IO学习笔记(一)

JDK1.4的java.nio.*包中,引入了新的javaI/O类库,其目的在于提高速度. 速度的提高来自于使用的结构更接近于操作系统执行I/O的方式:通道和缓冲器. 通道要么从缓冲中获得数据,要么向缓冲器发送数据. 唯一直接与通道交互的缓冲器是ByteBuffer-----也就是说,可以存储未加工字节的缓冲器.ByteBuffer是个相当基础的类,通过告知分配多少存储空间来创建一个ByteBuffer对象,并且还有一个方法选择集用于以原始的字节形式或基本数据类型输出和读取数据.但是没办法输出或

java对象序列化学习笔记

java对象|笔记 目前网络上关于对象序列化的文章不少,但是我发现详细叙述用法和原理的文章太少.本人把自己经过经验总结和实际运用中的体会写成的学习笔记贡献给大家.希望能为整个java社区的繁荣做一点事情.    序列化的过程就是对象写入字节流和从字节流中读取对象.将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机.对象序列化功能非常简单.强大,在RMI.Socket.JMS.EJB都有应用.对象序列化问题在网

jsp2 tag学习笔记

js|笔记 JSP2.0标签学习笔记1. 说明本文档是学习tomcat中例子的笔记,并没有参考相应的说明文档,因此不能保证本文观点的正确性.如果有不对之处,不妨email至8280338@tzenet.com,大家共同进步. 2. JSP2.0标签使用方法JSP2.0中标签的使用由多个部分组成: (1) WEB_INF/web.xml中添加标签引用 (2) 标签的实现,可能是class也可能是web templet (3) 在jsp文件中添加引用 在实际使用中,分析jsp2.0标签可以先从jsp

作为一个新手的Oracle(DBA)学习笔记

Oracle数据库笔记 Jack Chaing 作者QQ595696297 交流群 127591054 祝大家学习进步. 如果大家想看Word版本的可以去下载:Word排版比较清晰一些. http://download.csdn.net/detail/jack__chiang/9810532 此笔记是作者本人去年开始从一个DBA新人的学习笔记,积累至今,希望拿出来给那些对DBA有兴趣的童孩学习,大家一起努力嘛. 此笔记记录了作者工作学习中从零基础的学习的记录,和从中遇见的问题与问题的解决!很高兴

thinkphp学习笔记9—自动加载

原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\Util\Auth类: namespace Org\Util; class Auth { } 保存到ThinkPHP/Library/Org/Util/Auth.class.php 这样我们就可以直接实例化了, new \Org\Util\Auth(); 实例化之后系统会自动加载 ThinkPHP/

Java中jqGrid 学习笔记整理——进阶篇(二)_java

相关阅读: Java中jqGrid 学习笔记整理--进阶篇(一) 本篇开始正式与后台(java语言)进行数据交互,使用的平台为 JDK:java 1.8.0_71 myEclisp 2015 Stable 2.0 Apache Tomcat-8.0.30 Mysql 5.7 Navicat for mysql 11.2.5(mysql数据库管理工具) 一.数据库部分 1.创建数据库 使用Navicat for mysql创建数据库(使用其他工具或直接使用命令行暂不介绍) 2. 2.创建表 双击打

kali linux web渗透测试学习笔记

    kali linux web渗透测试学习笔记 metasploit使用方法: 启动: 第一步:启用Postgresql服务.service postgresql start 第二步:启用metasploit服务.service matasploit start 第三步:启动框架.msfconsole 一个ASP站点的sql注入 测试数字型注入点 1.网址:asp?ID+13,后面加',看看是什么数据库,然后输入1=1,1=2,得到数据库是microsoft acess 2.转用sqlma