Java I/O

来源:互联网 发布:边际报酬递减规律算法 编辑:程序博客网 时间:2024/05/19 23:10

-- Start

数据从其他地方流入我们的程序叫做输入流, 数据从我们的程序中流到其他地方叫做输出流, 由此可见, 所谓的输入输出是相对我们的程序而言的. Java 用 InputStream 类来表示输入流, 用 OutputStream 类来表示输出流, 由于它们是以字节(byte)为单位处理的, 所以在处理 Unicode 编码的信息时很不方便, 因此, Java 还提供了处理双字节(char)为单位的字符输入流(Reader) 和字符输出流(Writer).

Java I/O 库为我们提供了丰富的流类, 但同时也增大了我们学习的难度, 事实上如果你理解了装饰模式(Decorator), 那么学习 I/O 是非常容易的, 因为大部分流是为了包装另一个流, 从而提供额外的功能. 下面是 Java I/O 库为我们提供的流.

InputStream

ByteArrayInputStream从 byte 数组中读取数据FileInputStream从文件中读取数据SequenceInputStream连接一系列InputStream, 如linux命令 cat a.txt b.txt, 可以一次读取多个文件PipedInputStream连接一个PipedOutputStream, 通常一个线程读取数据, 另一个线程输出数据ObjectInputStream用来还原一个序列化后的对象BufferedInputStream包装另一个InputStream, 提供缓冲功能PushbackInputStream包装另一个InputStream, 提供了预查看的功能DataInputStream包装另一个InputStream, 以二进制形式读取Java原始数据类型和String


OutputStream

ByteArrayOutputStream将数据输出到byte数组FileOutputStream将数据输出到文件PipedOutputStream连接一个PipedInputStream, 通常一个线程读取数据, 另一个线程输出数据ObjectOutputStream用来序列化对象BufferedOutputStream包装另一个OutputStream, 提供缓冲功能DataOutputStream包装另一个InputStream, 以二进制形式输出Java原始数据类型和StringPrintStream包装另一个OutputStream, 提供格式化的功能


Reader

CharArrayReader从 char 数组中读取数据StringReader从String变量中读取数据FileReader从文件中读取数据BufferedReader包装另一个Reader, 提供缓冲功能LineNumberReader包装另一个Reader, 提供缓冲和获取行号的功能PushbackReader包装另一个Reader, 提供了预查看的功能PipedReader连接一个PipedWriter, 通常一个线程读取数据, 另一个线程输出数据InputStreamReader将字节输入流转换为字符输入流


Writer

CharArrayWriter将数据输出到 char 数组中StringWriter将数据输出到 String 变量中FileWriter将数据输出到文件中BufferedWriter包装另一个Writer, 提供缓冲功能PrintWriter包装另一个Writer, 提供了格式化的功能PipedWriter连接一个PipedReader, 通常一个线程读取数据, 另一个线程输出数据OutputStreamWriter将字节输出流转换为字符输出流


RandomAccessFile提供了随机读写文件的能力


通常, 系统与系统之间的交互方式之一是通过 FTP 发送文件, A 系统生成一个文件, 然后通过 FTP 发送给 B 系统, B 系统读取这个文件, 通常文件的格式有分隔符和定长两种, 下面的例子演示了如何输出和读取文件.

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;public class Test {public static void main(String[] args) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Service s = new Service();// 从数据库中获取数据List<User> users = s.getUsersFromDB();// 输出数据到文件// PrintWriter 和 BufferedWriter 包装了 FileWriter, 提供了缓冲和格式化的功能PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("user.csv")));for (User user : users) {out.printf("%1$s,%2$tF%n", user.getName(), user.getBirthday()); // 分隔符文件// out.printf("%1$-20s%2$-10tF%n", user.getName(), user.getBirthday()); // 定长文件}out.close();// 从文件中读取数据, 然后重新构造成对象// BufferedReader 包装了 FileReader, 提供了缓冲功能users.clear();BufferedReader in = new BufferedReader(new FileReader("user.csv"));String line;while ((line = in.readLine()) != null) {String[] fields = line.split(",");users.add(new User(fields[0].trim(), sdf.parse(fields[1].trim())));}in.close();}}class Service {public List<User> getUsersFromDB() {Calendar birthday = Calendar.getInstance();List<User> users = new ArrayList<User>();//birthday.set(Calendar.YEAR, 1980);birthday.set(Calendar.MONTH, 0);birthday.set(Calendar.DAY_OF_MONTH, 1);User u1 = new User("ZhangSan", birthday.getTime());users.add(u1);//birthday.set(Calendar.YEAR, 1990);birthday.set(Calendar.MONTH, 5);birthday.set(Calendar.DAY_OF_MONTH, 4);User u2 = new User("LiSi", birthday.getTime());users.add(u2);//return users;}}class User {private String name;private Date birthday;public User() {}public User(String name, Date birthday) {this.name = name;this.birthday = birthday == null ? null : (Date) birthday.clone(); // 保护性 copy}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirthday() {return birthday == null ? null : (Date) birthday.clone(); // 保护性 copy}public void setBirthday(Date birthday) {this.birthday = birthday == null ? null : (Date) birthday.clone(); // 保护性copy}}


---更多参见:Java 精萃
-- 声 明:转载请注明出处
-- Last Updated on 2012-06-06
-- Written by ShangBo on 2012-06-06
-- End
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 车子前脸裂开了怎么办 不想干了想辞职怎么办 药流期间老是吐怎么办 在工厂上班辞工后没发工资怎么办 培训期三天想走怎么办 药流吃了药吐了怎么办 工作3天不下去怎么办 在新公司融不进去怎么办 药流吃药吐了怎么办 药流期间发烧了怎么办 药流时第一天出现呕吐怎么办有事吗 药流第一天忘记第二次吃药了怎么办 药流吃药后吐了怎么办 药流只排血块不见孕囊怎么办 药流三天还有血怎么办 药流15天同房了怎么办 药流22天同房了怎么办 药流一直不排出怎么办 宝宝脸过敏红了怎么办 小孩湿疹脸上都是红红的怎么办 眼周刺痛红红的怎么办 脸敷面膜刺痛红红的怎么办 脸上有凹凸不平的坑怎么办 宝宝脸上角质层薄有红血丝怎么办 红衣军到决赛圈怎么办 宝宝湿疹留下的黑印怎么办 出牙宝宝很烦躁怎么办 法斗嘴唇破了怎么办 狗嘴巴周围红了怎么办 脸上起红包还痒怎么办 睾丸胀痛有下坠感怎么办 英语不好又不会读怎么办 七个月宝宝手上长倒刺怎么办 字母纹身纹反了怎么办 花甲生的吃了怎么办 别人告我欠他钱怎么办 实习手册没有公司的印章怎么办? 家长管的太严怎么办 对于老公沉迷于股票怎么办 月经期吃了香瓜怎么办 月经漏到内裤上怎么办