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 ...
随机推荐
- Linux编译安装Qt 5.4.1(-qt-xcb是必须要指定的,卸载自带的gcc等)
转载请注明文章:Linux编译安装Qt 5.4.1 出处:多客博图 很久不写文章了,过程很简单,但是操作很多,简单说吧. 前言: 操作系统CentOS 6.6,64位的. 1.安装gcc 4.8.4, ...
- 什么是YAML?
YAML是"YAML不是一种标记语言"的外语缩写 [1] (见前方参考资料原文内容):但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名.它是一种直观的能 ...
- extjs grid 复选框选择事件
开发中需求是统计选择的行数,所以要监控checkbox的选择事件包括表头的全选事件 遇到的问题就不赘述了 方案是监控grid的复选框和行加载时绑定事件 baseView: DBEN.controls. ...
- Delphi 的RTTI机制浅探3(超长,很不错)
转自:http://blog.sina.com.cn/s/blog_53d1e9210100uke4.html 目录========================================== ...
- Linux历史,安装,分区,版本
Linux 历史 1970年是 UNIX元年,这一年 Kenneth Lane Thompson 和 Dennis Ritchie 合作编写了UNIX系统. Stallman 发起了GNU 计划,他本 ...
- 快速理解类的访问控制(public,protected,private)
接触过面向对象编程的朋友们都知道类中的访问控制符无非有三个,public, protected, private. 理解他就先从期望他达到的效果先说吧 Public: 使成员对于整个程序内(类内类外) ...
- 视频技术详解:RTMP H5 直播流技术解析
本文聚焦 RTMP 协议的最精华的内容,接进行实际操作 Buffer 的练习和协议的学习. RTMP 是什么 RTMP 全称即是 Real-Time Messaging Protocol.顾名思义就是 ...
- java获取系统类型与版本
System的properties中有很多系统属性: System.out.println(System.getProperty("os.name")); System.out.p ...
- 【java自定义注解1】java自定义注解-属性
关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是 总结了两种方式,记录如下: 第一种:结合反射进行属性注入,代码如下: 1.定义一个注解: ...
- jsp路径兼容
jsp头 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&q ...