- 浏览: 624181 次
文章分类
最新评论
-
q781253433:
qin ~.求demo看看~
Android之Widget -
zhongyuanceshi:
博主,没看到你的例子的Demo,共享下
Android之Widget
下面四张图表明了类之间的继承关系,其中 红色、加粗的类名是常用的类 。
常用转换
FileReader——>BufferedReader
BufferedReader in= new BufferedReader(new FileReader("Text.java"));
InputStream——>InputStreamReader——>BufferedReader
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String——>byte[]——>ByteArrayInputStream——>DataInputStream
DataInputStream in= new DataInputStream(new ByteArrayInputStream(str.getBytes()));
FileInputStream——>BufferedInputStream——>DataInputStream
DataInputStream in=new DataInputStream(new BufferedInputStream(new FileInputStream("Data.txt")));
FileWriter——>BufferedWriter——>PrintWriter
PrintWriter pw=new PrintWriter(new BufferedWriter("text.out"));
System.out(PrintStream)——>PrintWriter
PrintWriter pw=new PrintWriter(System.out,true);
FileOutputStream——>BufferedOutputStream——>PrintStream
PrintStream ps= new PrintStream(new BufferedOutputStream(new FileOutputStream("text.out")));
FileOutputStream——>BufferedOutputStream——>DataOutputStream
DataOutputStream dos= new DataOutputStream(new BufferedOutputStream(new FileOutputStream("Data.txt")));
程序举例
import java.io.*;
public class IoStreamDemo {
public static void main(String[] args) throws IOException {
1.要想打开文件读取字符,你得先用String或File对象创建一个FileReader。
为了提高速度,你应该对这个文件作缓冲,因此你得把FileReader的reference 交给BufferedReader。
BufferedReader提供了readLine()方法,当你读到文件的末尾时readLine()会返回一个null,于是就退出while()循环了。
String sb是用来累加文件内容的,(再加一个换行符“\n”因为readLine()会把它们都剥掉).
最后用close()来清空缓冲区。
BufferedReader in = new BufferedReader(new FileReader("IOStreamDemo.java"));
String s,s2= new String();
StringBuffer sb = new StringBuffer();
while((s = in.readLine())!= null)
{ sb.append(s);
sb.append("\n");
}
in.close();
s2=sb.toString();
2. 用System.in生成一个能读取控制台输入的流。System.in是一个InputStream,
而BufferedReader需要一个Reader作参数,所以要先通过InputStreamReader来转转手。
Java遵循标准I/O的模型,提供了Syetem.in,System.out,以及System.err。
System.out是一个已经预先处理过的,被包装成PrintStream的对象。
System.err也是一个PrintStream;
System.in是一个未经处理的InputStream。
也就是说,虽然你可以直接往System.out和System.err上写,但是要想读System.in的话,就必须先做处理了。
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter a line:");
System.out.println(stdin.readLine());
3. 用String s2作参数创建一个StringReader。然后用StringReader的read()方法把字符读出来,再送到控制台上去。read()会把读出来的byte当作int,所以要想正常打印的话,你得先把它们转成char。
StringReader in2 = new StringReader(s2);
int c;
while((c = in2.read()) != -1)
System.out.print((char)c);
4. 要想读取"格式化"的数据,你就得用DataInputStream了,DataInputStream是一个面向byte的I/O类,不是面向char 的。因此你只能从头到底一直用InputStream了。当然你可以把所有的东西都当成byte。然后用InputStream读出来。但这里是 String。要想把String当成byte数组。可以用String的getBytes()方法。而ByteArrayInputStream是可以 处理byte数组的。
try {
DataInputStream in3 = new DataInputStream(
new ByteArrayInputStream(s2.getBytes()));
while(true)
System.out.print((char)in3.readByte());
} catch(EOFException e) {
System.err.println("End of stream");
}
5.向文件中写数据。先创建一个FileWriter,BufferedWriter是免不掉的。
然后再让PrintWriter去排版。这样就能得出能够读得懂的,普通的文本文件了。
输入流用完之后,readLine()会返回null。
最后调用close()方法清空缓冲区。
try {
BufferedReader in4 = new BufferedReader( new StringReader(s2));
PrintWriter out1 = new PrintWriter( new BufferedWriter(new FileWriter("IODemo.out")));
int lineCount = 1;
while((s = in4.readLine()) != null )
out1.println(lineCount++ + ": " + s);
out1.close();
} catch(EOFException e) {
System.err.println("End of stream");
}
}
6. 存储和恢复数据
PrintWriter会对数据进行格式化,这样人就能读懂了。但是如果数据输出之后,还要恢复出来供其它流用,那你就必须用 DataOutputStream来写数据,再用DataInputStream来读数据了。当然,它们可以是任何流,不过我们这里用的是一个经缓冲的文 件。DataOutputStream和DataInputStream是面向byte的,因此这些流必须都是InputStream和 OutputStream。
如果数据是用DataOutputStream写的,那么不管在哪个平台上,DataInputStream都能准确地把它还原出来。这一点真是太有用了,因为没人知道谁在为平台专属的数据操心。如果你在两个平台上都用Java,那这个问题就根本不存在了。
用DataOutputStream写String的时候,要想确保将来能用DataInputStream恢复出来,唯一的办法就是使用UTF-8编码。
UTF-8是Unicode的一种变形。Unicode用两个字节来表示一个字符。但是,如果你处理的全部,或主要是ASCII字符(只有7位),那么无 论从存储空间还是从带宽上看,就都显得太浪费了,所以UTF-8 用一个字节表示ASCII字符,用两或三个字节表示非ASCII的字符。此外,字符串的长度信息存在(字符串)的头两个字节里。writeUTF( )和readUTF( )用的是Java自己的UTF-8版本(JDK文档里有关于这个字符集的完整讲解,就在这两个方法的文档里),所以如果你要用一个Java程序读取 writeUTF( )写的字符串的话,就必须进行一些特殊处理了。
有了writeUTF( )和readUTF( ),你就能放心地把String和其它数据混在一起交给DataOutputStream了,因为你知道String是以Unicode的形式存储的,而且可以很方便地用DataOutputStream恢复出来。
writeDouble( )会往流里写double,而它"影子"readDouble( )则负责把它恢复出来(其它数据也有类似的读写方法)。但是要想让读取方法能正常工作,你就必须知道流的各个位置上都放了些什么数据。因为你完全可以把 double读成byte,char,或其它什么东西。所以要么以固定的格式写文件,要么在文件里提供额外的解释信息,然后一边读数据一边找数据。先提一 下,对于复杂数据的存储和恢复,对象的序列化可能会比较简单。
try {
DataOutputStream out2 = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream("Data.txt")));
out2.writeDouble(3.14159);
out2.writeUTF("That was pi");
out2.writeDouble(1.41413);
out2.writeUTF("Square root of 2");
out2.close();
DataInputStream in5 = new DataInputStream(
new BufferedInputStream( new FileInputStream("Data.txt")));
System.out.println(in5.readDouble());
System.out.println(in5.readUTF());
System.out.println(in5.readDouble());
System.out.println(in5.readUTF());
} catch(EOFException e) {
throw new RuntimeException(e);
}
}
发表评论
-
System.out.printf输出格式
2012-12-13 22:01 2519// 定义一些变量,用来格式化输出。 double ... -
android分享功能的实现(分享到微博空间等)
2012-11-03 22:15 2206//Intent intent = new Inten ... -
Android开发环境配置
2012-11-03 20:04 8801、JDK安装: http://jing ... -
java,c,c++ 语言之间基本数据类型的比较
2012-08-24 14:31 1259原文:http://eric-gcm.iteye. ... -
堆栈&内存基础知识
2012-08-23 16:34 1433为了理解什么是堆栈缓 ... -
JAVA和C++的区别(转)
2012-08-23 13:45 912这是Java与C++区别的一个比较完整的答案,大家可以学习 ... -
java关键字null
2012-02-16 09:44 2140一、null是代表不确定的对象 Java中,n ... -
烽火学习笔记1
2012-02-15 22:17 1465Date 0808 Android 开发 ... -
notify notifyall wait 方法的使用
2012-02-14 14:14 950// object类的notify(),notify ... -
equals() 与 == 区别
2012-02-14 13:43 1106equals() 用来比较两个对象是否相等,即两个对象的内容是 ... -
OO原则:
2012-01-19 14:14 8561 封装变化 2 多用组合,少用继承 ... -
System 获取系统数据
2011-12-31 15:36 913System.out.println(System.get ... -
eclipse J2me环境配置
2011-12-09 16:39 3302用eclipse开发手机软件,尤其是J2me开发的时候,可以用 ... -
ps基础知识1--dpi ppi 认识
2011-11-17 14:15 291PPI与DPI区别: PPI(Pixel Per Inc ... -
操作系统学习1
2011-11-15 20:40 1060我们用一组简单的数学公式来描述操作系统的组成要素: ... -
Java虚拟机原理、内存分配和回收机制
2011-11-15 15:03 2932通常情况下Java编译过的代码是一些class ... -
程序员成长中的九重境界 你属于哪一重?
2011-10-29 10:02 762摘自:http://fellow.51ct ... -
json与xml比较
2011-10-27 17:14 1576JavaScript学习网站: http://www.c ... -
static 用法小结
2011-10-24 14:42 920用static修饰的类成员独立于任何类的对象,可以在实 ... -
单例模式
2011-10-11 13:51 929java 单例模式的好处 单例模式分三种:懒汉式单例、饿汉式 ...
相关推荐
5. **套接字编程**:讲解了TCP和UDP套接字的使用,如何建立客户端-服务器通信,以及Socket和ServerSocket类的使用方法。 6. **XML和网络I/O**:讨论了在Java中处理XML的API,如DOM、SAX和StAX,以及如何通过HTTP、...
这是一个关于Java I/O的知识点总结,希望大家共同学习,共同进步
Java 新I/O,也称为NIO(New Input/Output),是Java平台中对传统I/O模型的一种改进。在Java 1.4版本中引入的NIO库为开发人员提供了更高效、非阻塞的数据处理方式,特别适用于高并发、低延迟的系统。NIO的核心在于...
Java I/O类库是Java平台的核心部分,它提供了丰富的类用于处理输入和输出操作。这个系统包括了多种类,从简单的字节流到复杂的字符流,以及一系列的装饰器类,用于扩展和增强原始流的功能。 Java 1.0 和 1.1 中的I/...
Java I/O, NIO, 和 NIO.2 是Java平台中处理输入/输出操作的核心组件,对于任何Java开发者来说,理解和掌握这些概念至关重要。本文将深入探讨这些技术,旨在提供一个全面而详尽的概述。 Java I/O(Input/Output)是...
Java I/O 编程是Java开发中的重要组成部分,主要用于处理数据的输入与输出。下面将详细阐述其中的关键概念和方法。 1. 数据流的概念及输入输出方法: 数据流是计算机中进行数据传输的通道,包括从外部设备到程序的...
- 分析`DataReader.java`和`DataWriter.java`的源码可以帮助理解过滤流的具体实现和使用方法。这些类可能会展示如何创建过滤流实例,以及如何利用它们进行带格式的数据读写。 7. **工具支持** - Java I/O库提供了...
OReilly.Java.I.O.2nd.Edition.May.2006 Java的io包主要包括: 1. 两种流:字节流(byte Stream)和字符流(character stream),这两种流不存在所谓的谁代替谁、谁比谁高级之说,它们互为补充,只是侧重点不同...
在Java编程环境中,I/O(输入/输出)操作是程序与外部世界交互的关键部分,包括读取文件、网络通信等。对于高效的系统设计,理解并掌握阻塞I/O和非阻塞I/O是非常重要的。这两种I/O模型在处理数据传输时有着显著的...
为了提高效率,Java I/O系统使用缓冲区技术。BufferedInputStream和BufferedReader是带缓冲的输入流,它们会在内部维护一个缓冲区,批量读取或写入数据,减少系统调用的次数。 4. **转换流** 转换流是连接字节流...
本篇文章将深入探讨Java I/O系统的核心概念、主要类库以及常见使用场景。 首先,Java I/O系统的基础是`java.io`包,它提供了许多用于处理不同类型的流的类。这些流分为字符流和字节流两大类。字符流处理的是Unicode...
Java I/O 流代码实例大全(01~09) File、FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
Java中的I/O流处理是程序与外部设备交互数据的关键机制,包括从文件、网络、内存等数据源读取数据和向这些目标写入数据。I/O流系统在Java的`java.io`包中被实现,提供了丰富的类和接口来支持各种类型的流操作。 **I...
在Java I/O中,我们使用流(Stream)的概念来处理数据,流是数据传输的通道。本套习题旨在帮助你深入理解和熟练掌握Java I/O的各种操作。 一、输入流(Input Stream) 1. 字节流:InputStream类是所有字节输入流的...
Java I/O层次结构详解 Java I/O系统是Java平台中不可或缺的一部分,它为开发者提供了处理输入和输出的强大工具。在Java中,I/O操作主要基于流(Stream)的概念,流可以被视为数据的有序序列,既可以代表从源读取...
Java I/O系统是Java编程语言中的一个核心组成部分,它提供了处理输入输出操作的类和接口。这个系统的设计目的是为了使得应用程序能够与外部世界交互,包括读取和写入文件、网络数据、标准输入输出流等。在Java中,I/...
为了实现通讯录的功能,开发者可能使用了以下核心的Java I/O类: 1. `File` 类:用于表示文件和目录路径名的抽象表示。 2. `FileInputStream` 和 `FileOutputStream`:这两个类是字节输入流和输出流,分别用于从...
### Java I/O总结 #### 一、从`new BufferedReader(new InputStreamReader(conn.getInputStream()))`想到的 在Java编程中,处理输入输出(I/O)是一项常见的任务。这段代码`new BufferedReader(new ...
Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行...
通过学习和理解这些知识点,初学者能够熟练地使用Java I/O流进行各种数据操作,无论是简单的文件读写,还是复杂的网络数据交换,都能游刃有余。在实际编程中,根据需求选择合适的流类型和组合,能有效地提升程序的...