Java编程思想:I/O的典型使用方式
import java.io.*; public class Test { public static void main(String[] args) { // BufferedInputFile.test(); // MemoryInput.test(); // FormattedMemoryInput.test(); // TestEOF.test1(); // TestEOF.test2(); // BasicFileOutput.test(); // FileOutputShotcut.test(); // StoringAndRecoveringData.test(); UsingRandomAccessFile.test(); } } /* 打开一个文件用于字符输入,为提高速度,需要用到缓冲 */ class BufferedInputFile { public static String read(String file) { String result = null; try { BufferedReader reader = new BufferedReader(new FileReader(file)); StringBuilder sb = new StringBuilder(); String str; while ((str=reader.readLine()) != null) { sb.append(str+"\n"); } reader.close(); result=sb.toString(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } public static void test() { System.out.println(read("./src/Test.java")); } } /* BufferedInputFile.read()读入的String结果被用来创造一个StringReader 然后调用read()每次读取一个字符,并将它送到控制台 */ class MemoryInput { public static void test() { StringReader sr = new StringReader(BufferedInputFile.read("./src/Test.java")); int c; try { while ((c = sr.read()) != -1) { System.out.println((char) c); } } catch (IOException e) { e.printStackTrace(); } } } /* 要读取格式化数据,可以使用DataInputStream,它是一个面向字节的I/O类(不是面向 字符的)。因此我们必须使用InputStream类而不是Reader类 */ class FormattedMemoryInput { public static void test() { try{ DataInputStream in = new DataInputStream( new ByteArrayInputStream( BufferedInputFile.read("./src/Test.java").getBytes() ) ); while (true) { System.out.println((char)in.readByte()); } } catch (IOException e) { System.out.println("End of stream"); e.printStackTrace(); } } } /* 利用avaliable()来查看还有多少可供读取的字符,用于检测输入是否结束 */ class TestEOF { //需要为ByteArrayInputStream提供字节数组作为构造参数 public static void test1() { try{ DataInputStream in = new DataInputStream( new ByteArrayInputStream( BufferedInputFile.read("./src/Test.java").getBytes() ) ); while (in.available()!=0) { System.out.println((char)in.readByte()); } } catch (IOException e) { e.printStackTrace(); } } //这儿DataInputStream和BufferedInputStream都是装饰器 public static void test2() { try { DataInputStream in = new DataInputStream( new BufferedInputStream( new FileInputStream("./src/Test.java") ) ); } catch (FileNotFoundException e) { e.printStackTrace(); } } } /* 为了提供格式化机制,FileWriter被装饰成了PrintWriter */ class BasicFileOutput { private static String file = "./src/file3"; public static void test() { try { //创建文件输入流 BufferedReader in = new BufferedReader( new StringReader( BufferedInputFile.read("./src/Test.java"))); //创建文件输出流 PrintWriter out = new PrintWriter( new BufferedWriter( new FileWriter(file))); //从输入流写到输出流 int lineCount=1; String str; while ((str = in.readLine()) != null) { out.println(lineCount++ + " : "+str); } out.close(); System.out.println(BufferedInputFile.read(file)); } catch (IOException e) { e.printStackTrace(); } } } /* PrintWriter的辅助构造器,可以减少装饰工作 */ class FileOutputShotcut { private static String file = "./src/file4"; public static void test() { try { //创建文件输入流 BufferedReader in = new BufferedReader( new StringReader( BufferedInputFile.read("./src/Test.java"))); //创建文件输出流 PrintWriter out = new PrintWriter(file); //从输入流写到输出流 int lineCount=1; String str; while ((str = in.readLine()) != null) { out.println(lineCount++ + " : "+str); } out.close(); System.out.println(BufferedInputFile.read(file)); } catch (IOException e) { e.printStackTrace(); } } } /* DataOutputStream输出可供另一个流恢复的数据 */ class StoringAndRecoveringData { public static void test() { try{ //建立输出流,输出数据 DataOutputStream out = new DataOutputStream( new BufferedOutputStream( new FileOutputStream("./src/file4"))); //建立输入流,恢复数据 DataInputStream in = new DataInputStream( new BufferedInputStream( new FileInputStream("./src/file4"))); out.writeDouble(3.1415926); out.writeUTF("That was pi"); out.writeDouble(1.41413); out.writeUTF("Square root of 2"); out.close(); System.out.println(in.readDouble()); System.out.println(in.readUTF()); System.out.println(in.readDouble()); System.out.println(in.readUTF()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } /* RandomAcccessFile拥有读取基本烈性和UTF-8字符串的各种具体的方法,同时seek() 方法可以在文件中到处移动 */ class UsingRandomAccessFile { private static String file = "./src/file5"; private static void display(){ try{ RandomAccessFile rf = new RandomAccessFile(file,"r"); for (int i = 0; i < 7; i++) { System.out.println("VALUE "+i+": "+rf.readDouble()); } System.out.println(rf.readUTF()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static void write() { try{ RandomAccessFile rf = new RandomAccessFile(file,"rw"); for (int i = 0; i < 7; i++) { rf.writeDouble(i*1.414); } rf.writeUTF("The end of the file"); rf.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void test() { write(); display(); try{ RandomAccessFile rf = new RandomAccessFile(file,"rw"); rf.seek(5*8); rf.writeDouble(47.01); rf.close(); display(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Java编程思想:I/O的典型使用方式的更多相关文章
- 24.JAVA编程思想——违例差错控制
24.JAVA编程思想--违例差错控制 Java 的基本原理就是"形式错误的代码不会执行". 与C++类似,捕获错误最理想的是在编译期间,最好在试图执行程序曾经.然而.并不是全部错 ...
- Java编程思想 第21章 并发
这是在2013年的笔记整理.现在重新拿出来,放在网上,重新总结下. 两种基本的线程实现方式 以及中断 package thread; /** * * @author zjf * @create_tim ...
- JAVA编程思想——分析阅读
需要源码.JDK1.6 .编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力.领 ...
- 《Java编程思想》读书笔记(二)
三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第一章到第十章的内容,这一次记录的是第 ...
- 《Java编程思想》读书笔记(三)
前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十一章到第十六章的内容,这一次 ...
- 《Java编程思想》读书笔记(五)
前言:本文是<Java编程思想>读书笔记系列的最后一章,本章的内容很多,需要细读慢慢去理解,文中的示例最好在自己电脑上多运行几次,相关示例完整代码放在码云上了,码云地址:https://g ...
- JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)
switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- [Java编程思想-学习笔记]第3章 操作符
3.1 更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...
随机推荐
- 芒果TV For Windows10 成长历史 & 迭代历史 & 新闻报道
芒果TV 是国内领先的基于Windows10操作系统并支持Windows10全系列设备的视频应用和内容服务商. Win10商店版<芒果TV>是湖南快乐阳光互动娱乐传媒有限公司专门为Wind ...
- 简单的Windows Webcam应用:Barcode Reader
原文:简单的Windows Webcam应用:Barcode Reader 在Windows上用WinForm创建一个Webcam应用需要用到DirectShow.DirectShow没有提供C#的接 ...
- AndroidStudio问题汇总
1.Error:Execution failed for task ':app:preDebugAndroidTestBuild'.> Conflict with dependency 'com ...
- [转] Protobuf高效结构化数据存储格式
从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结.下面的操作以C++为编程语言,protoc的版本为libprotoc 3.2.0. 一.Protobuf? 1. 是什么? Goo ...
- 从IntToHex()说起,栈/堆地址标准写法 good
学习中的一些牢骚.栈/堆地址标准写法. 2017-02-12 • 杂谈 • 暂无评论 • 老衲 •浏览 226 次 我一直都在寻找各种业务功能的最简单写法,用减法的模式来开发软件.下面是我的写法,如果 ...
- 国外优秀的UI设计资源库收集
国外优秀的UI设计资源库 网站设计或者说UI设计对于Web上的运用是非常的关键,一个站做得好不好,能不能吸引人的眼球,设计占了不低的地位,但话又说回来,Web前端人员又有多少人是设计专业毕业,具有这方 ...
- 关于 win32 下磁盘的遍历方法
最近要写个在线专杀的东东,虽然是专杀(本来只要清除几个特定的文件和杀几个特定的进程,然后把用户的注册表恢复正常,很多病毒木马最喜欢干的一件事情就是写 映像劫持 然后机器一重启,安全相关的软件全部玩完了 ...
- QT Udp组播(穿透)
http://blog.csdn.net/victoryknight/article/details/7814243 主题 UDPQt路由器 局域网内的两台机器如果隔有路由器,那么这两台机器之间不 ...
- 测试 Components 与 Controls 的区别(嵌套在Panel上的Edit,依然是Form1的Component)
本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...
- Windows Phone8.1系统新特性
Windows Phone 8.1 beta SDK已经为大家透露了不少WP8.1系统的新特性,不过这些新特性还不能保证在最终的消费者版本中都有所体现,毕竟它还仅是SDK版本.日前,国外媒体WPCen ...