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
OutputStream
Reader
Writer
通常, 系统与系统之间的交互方式之一是通过 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
- Java I/O系统----------- 标准I/O
- Socket Java I/O Socket I/O
- JAVA I/O
- 复习java: I/O
- Java I/O 体系
- java I/O流
- Java 标准I/O
- Java I/O系统
- Java I/O
- JAVA I/O--(2)
- JAVA I/O--(3)
- JAVA I/O--(4)
- java i/o包
- JAVA I/O (一)
- java I/O流
- JAVA I/O操作
- Java I/O原理
- JAVA的I/O
- Java里timer执行定时任务
- 常用cmd命令
- 使用Axis编写WebService
- 除了技术我们还应该知道的
- 画正弦线
- Java I/O
- 采用CXF 构建webservice
- 虚拟机域的安装配置
- 安装SourceNavigator 6.0
- android json解析及简单例子
- 从DDOS说起:最优的服务器集群方案-PaceMaker
- java同步和互斥
- 趣题 do while continue
- 谁拿了最多奖学金