java学习之路---IO类----字节流
2013-11-24 20:53
267 查看
在java io中包含流的操作主要有两种 字节流和字符流,两类都有输入输出操作。。字节流输出主要是OutputStream,输入InputStream,在字符流中输出主要是:Writer,输入主要是:Reader
java io 操作也有步骤,以文件为例
(1)使用File类来打开一个文件
(2)通过字节流或字符流的子类指定输出的位置
(3)进行读写操作
(4)关闭输入输出
1.字节流
字节流只要是以操作byte数据,以byte数组为主,组要操作类是OutputStream,InputStream
2.字节输出流
看下源码:
public abstract class OutputStream implements Closeable,
Flushable {
[align=left] public abstract void write(int b) throws IOException;[/align]
public void write(byte b[]) throws IOException
{
[align=left] write(b, 0, b. length);[/align]
[align=left] }[/align]
[align=left]
[/align]
public void write(byte b[], int off, int len) throws IOException
{
if (b
== null ) {
[align=left] throw new NullPointerException();[/align]
} else if ((off
< 0) || (off > b.length) || (len < 0) ||
((off + len) > b. length)
|| ((off + len) < 0)) {
[align=left] throw new IndexOutOfBoundsException();[/align]
} else if (len
== 0) {
[align=left] return;[/align]
[align=left] }[/align]
for (int i
= 0 ; i < len ; i++) {
[align=left] write(b[off + i]);[/align]
[align=left] }[/align]
[align=left] }[/align]
public void flush() throws IOException
{
[align=left] }[/align]
public void close() throws IOException
{
[align=left] }[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]关于它的实现,它实现了一个Closeable(关闭)和flushable(刷新)[/align]
[align=left]
[/align]
[align=left]它一共就这么多方法[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]
[/align]
3.一般字节输出流的文件操作用FileOutputStream
[align=left]public class OutputStreamDemo {[/align]
[align=left] [/align]
public static void main(String[]
args) throws Exception{
[align=left] //第一步,找到一个文件:[/align]
[align=left] [/align]
File f= new
File("f:" +File.separator+"a.txt");
[align=left] [/align]
[align=left] //第二步,通过字节流的子类来实例化[/align]
[align=left] [/align]
[align=left] OutputStream out= null;[/align]
[align=left] out= new FileOutputStream(f);[/align]
[align=left] [/align]
[align=left] //第三步,进行读写操作[/align]
[align=left] String str= "hello world";[/align]
[align=left] byte b[]=str.getBytes();[/align]
[align=left] out.write(b);[/align]
[align=left] [/align]
[align=left] //第四步,关闭流[/align]
[align=left] [/align]
[align=left] out.close();[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]补充:如果上面文件不存在,会自动创建[/align]
[align=left]
[/align]
[align=left]4.你反复的执行上面的程序,你会发现每一运行都会覆盖原来的内容,现在我想在后面继续写,那就要用它的另外的构造方法[/align]
[align=left]
[/align]
[align=left] public class OutputStreamDemo1 {[/align]
public static void main(String[]
args) throws Exception{
[align=left] File f= new File("f:" +File.separator+"a.txt");[/align]
[align=left] [/align]
[align=left] OutputStream out= new FileOutputStream(f, true);[/align]
[align=left] [/align]
[align=left] String str= "hello like";[/align]
[align=left] [/align]
[align=left] byte b[]=str.getBytes();[/align]
[align=left] [/align]
[align=left] for(int i=0;i<b.length;i++){[/align]
[align=left] out.write(b[i]); //这里用一个一个的写入,和上面的效果一样,看自己喜欢那个就用那个[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] out.close();[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] }[/align]
[align=left]
[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]补充:如果需要换行:String str="\r\n hello like";[/align]
[align=left]
[/align]
[align=left]5.字节输入流[/align]
[align=left]
[/align]
[align=left] 看源码:[/align]
public abstract class InputStream implements Closeable
{
[align=left]
[/align]
[align=left]由于方法比较多,就不全部列举了,自己可以去看下[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]6.字节出入流文件操作[/align]
[align=left]
[/align]
public class InputStreamDemo
{
public static void main(String[]
args) throws Exception {
[align=left] File f= new File("f:"+File.separator +"a.txt" );[/align]
[align=left] [/align]
[align=left] InputStream in= new FileInputStream(f);[/align]
[align=left] [/align]
[align=left] byte b[]=new byte[1024];[/align]
[align=left] [/align]
[align=left] in.read(b);[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] in.close();[/align]
[align=left] [/align]
[align=left] System. out.println(new String(b));[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]结果:[/align]
[align=left]hello worldhello[/align]
[align=left]从结果中发现后面还有很多空格,这是因为,我们的byte[]数组大小1024,所以我们要做处理[/align]
[align=left]
[/align]
public class InputStreamDemo1
{
public static void main(String[]
args) throws Exception{
[align=left] File f= new File("f:"+File.separator +"a.txt" );[/align]
[align=left] [/align]
[align=left] FileInputStream in= new FileInputStream(f);[/align]
[align=left] [/align]
[align=left] byte b[]=new byte[1024];[/align]
[align=left] [/align]
[align=left] int len=in.read(b);[/align]
[align=left] [/align]
[align=left] in.close();[/align]
[align=left] [/align]
[align=left] System. out.println("读入数据的长度:" +len);[/align]
[align=left] [/align]
[align=left] System. out.println("内容为" +new String(b,0,len));[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left]
[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]结果:[/align]
[align=left]读入数据的长度:21[/align]
[align=left]内容为hello worldhello like [/align]
以上虽然解决了,但是治标不治本,它还是开辟那么的空间,我们要做到需要好多就开辟好多
public class InputStreamDemo2
{
public static void main(String[]
args) throws Exception{
File f= new
File("f:" +File.separator+"a.txt");
[align=left] [/align]
[align=left] InputStream in= new FileInputStream(f);[/align]
[align=left] [/align]
[align=left] byte b[]=new byte[(int)f.length()];[/align]
[align=left] [/align]
[align=left] in.read(b);[/align]
[align=left] [/align]
[align=left] in.close();[/align]
[align=left] System. out.println(new String(b));[/align]
[align=left] }[/align]
[align=left]
[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]结果:[/align]
[align=left]
[/align]
[align=left]hello worldhello like[/align]
[align=left]
[/align]
[align=left]还可以用另外一种读取方法:[/align]
[align=left]
[/align]
[align=left] public class InputStreamDemo3 {[/align]
public static void main(String[]
args)throws Exception {
[align=left] File f= new File("f:"+File.separator +"a.txt" );[/align]
[align=left] [/align]
[align=left] InputStream in= new FileInputStream(f);[/align]
[align=left] [/align]
[align=left] byte b[]=new byte[1024];[/align]
[align=left] int temp=0;[/align]
[align=left] int len=0;[/align]
[align=left] while((temp=in.read())!=-1){//读到文件最后才会出现-1[/align]
[align=left] b[len]=( byte)temp;[/align]
[align=left] len++;[/align]
[align=left] }[/align]
[align=left] in.close();[/align]
[align=left] [/align]
System. out.println(new String(b,
0,len));
[align=left] }[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]结果:[/align]
[align=left]
[/align]
hello worldhello like
java io 操作也有步骤,以文件为例
(1)使用File类来打开一个文件
(2)通过字节流或字符流的子类指定输出的位置
(3)进行读写操作
(4)关闭输入输出
1.字节流
字节流只要是以操作byte数据,以byte数组为主,组要操作类是OutputStream,InputStream
2.字节输出流
看下源码:
public abstract class OutputStream implements Closeable,
Flushable {
[align=left] public abstract void write(int b) throws IOException;[/align]
public void write(byte b[]) throws IOException
{
[align=left] write(b, 0, b. length);[/align]
[align=left] }[/align]
[align=left]
[/align]
public void write(byte b[], int off, int len) throws IOException
{
if (b
== null ) {
[align=left] throw new NullPointerException();[/align]
} else if ((off
< 0) || (off > b.length) || (len < 0) ||
((off + len) > b. length)
|| ((off + len) < 0)) {
[align=left] throw new IndexOutOfBoundsException();[/align]
} else if (len
== 0) {
[align=left] return;[/align]
[align=left] }[/align]
for (int i
= 0 ; i < len ; i++) {
[align=left] write(b[off + i]);[/align]
[align=left] }[/align]
[align=left] }[/align]
public void flush() throws IOException
{
[align=left] }[/align]
public void close() throws IOException
{
[align=left] }[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]关于它的实现,它实现了一个Closeable(关闭)和flushable(刷新)[/align]
[align=left]
[/align]
[align=left]它一共就这么多方法[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]
[/align]
[align=left]
[/align]
3.一般字节输出流的文件操作用FileOutputStream
[align=left]public class OutputStreamDemo {[/align]
[align=left] [/align]
public static void main(String[]
args) throws Exception{
[align=left] //第一步,找到一个文件:[/align]
[align=left] [/align]
File f= new
File("f:" +File.separator+"a.txt");
[align=left] [/align]
[align=left] //第二步,通过字节流的子类来实例化[/align]
[align=left] [/align]
[align=left] OutputStream out= null;[/align]
[align=left] out= new FileOutputStream(f);[/align]
[align=left] [/align]
[align=left] //第三步,进行读写操作[/align]
[align=left] String str= "hello world";[/align]
[align=left] byte b[]=str.getBytes();[/align]
[align=left] out.write(b);[/align]
[align=left] [/align]
[align=left] //第四步,关闭流[/align]
[align=left] [/align]
[align=left] out.close();[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]补充:如果上面文件不存在,会自动创建[/align]
[align=left]
[/align]
[align=left]4.你反复的执行上面的程序,你会发现每一运行都会覆盖原来的内容,现在我想在后面继续写,那就要用它的另外的构造方法[/align]
[align=left]
[/align]
[align=left] public class OutputStreamDemo1 {[/align]
public static void main(String[]
args) throws Exception{
[align=left] File f= new File("f:" +File.separator+"a.txt");[/align]
[align=left] [/align]
[align=left] OutputStream out= new FileOutputStream(f, true);[/align]
[align=left] [/align]
[align=left] String str= "hello like";[/align]
[align=left] [/align]
[align=left] byte b[]=str.getBytes();[/align]
[align=left] [/align]
[align=left] for(int i=0;i<b.length;i++){[/align]
[align=left] out.write(b[i]); //这里用一个一个的写入,和上面的效果一样,看自己喜欢那个就用那个[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] out.close();[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] }[/align]
[align=left]
[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]补充:如果需要换行:String str="\r\n hello like";[/align]
[align=left]
[/align]
[align=left]5.字节输入流[/align]
[align=left]
[/align]
[align=left] 看源码:[/align]
public abstract class InputStream implements Closeable
{
[align=left]
[/align]
[align=left]由于方法比较多,就不全部列举了,自己可以去看下[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]6.字节出入流文件操作[/align]
[align=left]
[/align]
public class InputStreamDemo
{
public static void main(String[]
args) throws Exception {
[align=left] File f= new File("f:"+File.separator +"a.txt" );[/align]
[align=left] [/align]
[align=left] InputStream in= new FileInputStream(f);[/align]
[align=left] [/align]
[align=left] byte b[]=new byte[1024];[/align]
[align=left] [/align]
[align=left] in.read(b);[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] in.close();[/align]
[align=left] [/align]
[align=left] System. out.println(new String(b));[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]结果:[/align]
[align=left]hello worldhello[/align]
[align=left]从结果中发现后面还有很多空格,这是因为,我们的byte[]数组大小1024,所以我们要做处理[/align]
[align=left]
[/align]
public class InputStreamDemo1
{
public static void main(String[]
args) throws Exception{
[align=left] File f= new File("f:"+File.separator +"a.txt" );[/align]
[align=left] [/align]
[align=left] FileInputStream in= new FileInputStream(f);[/align]
[align=left] [/align]
[align=left] byte b[]=new byte[1024];[/align]
[align=left] [/align]
[align=left] int len=in.read(b);[/align]
[align=left] [/align]
[align=left] in.close();[/align]
[align=left] [/align]
[align=left] System. out.println("读入数据的长度:" +len);[/align]
[align=left] [/align]
[align=left] System. out.println("内容为" +new String(b,0,len));[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left]
[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]结果:[/align]
[align=left]读入数据的长度:21[/align]
[align=left]内容为hello worldhello like [/align]
以上虽然解决了,但是治标不治本,它还是开辟那么的空间,我们要做到需要好多就开辟好多
public class InputStreamDemo2
{
public static void main(String[]
args) throws Exception{
File f= new
File("f:" +File.separator+"a.txt");
[align=left] [/align]
[align=left] InputStream in= new FileInputStream(f);[/align]
[align=left] [/align]
[align=left] byte b[]=new byte[(int)f.length()];[/align]
[align=left] [/align]
[align=left] in.read(b);[/align]
[align=left] [/align]
[align=left] in.close();[/align]
[align=left] System. out.println(new String(b));[/align]
[align=left] }[/align]
[align=left]
[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]结果:[/align]
[align=left]
[/align]
[align=left]hello worldhello like[/align]
[align=left]
[/align]
[align=left]还可以用另外一种读取方法:[/align]
[align=left]
[/align]
[align=left] public class InputStreamDemo3 {[/align]
public static void main(String[]
args)throws Exception {
[align=left] File f= new File("f:"+File.separator +"a.txt" );[/align]
[align=left] [/align]
[align=left] InputStream in= new FileInputStream(f);[/align]
[align=left] [/align]
[align=left] byte b[]=new byte[1024];[/align]
[align=left] int temp=0;[/align]
[align=left] int len=0;[/align]
[align=left] while((temp=in.read())!=-1){//读到文件最后才会出现-1[/align]
[align=left] b[len]=( byte)temp;[/align]
[align=left] len++;[/align]
[align=left] }[/align]
[align=left] in.close();[/align]
[align=left] [/align]
System. out.println(new String(b,
0,len));
[align=left] }[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]结果:[/align]
[align=left]
[/align]
hello worldhello like
相关文章推荐
- java学习14-面向对象(abstract抽象类)
- java学习13-面向对象(final和对象初始化过程)
- JVM如何理解Java泛型类
- 从零开始学android:搭建Android开发环境 —— ADT、Eclipse、Android SDK的配置及使用
- Eclipse Hadoop开发 DFSLocation显示不完整
- 基于注解风格的Spring-MVC的拦截器
- 基于注解风格的Spring-MVC的拦截器
- Spring3之InternalResourceViewResolver
- [Java 7][msvcr100.dll] Error when load Eclipse
- [Java 7][msvcr100.dll] Error when load Eclipse
- java学习12-面向对象(this与super)
- eclipse 中添加自定义 classpath 的方法,以及 javac 和 java 的一些使用细节
- Spring经典总结
- java进行UDP编程例子
- java学习11-面向对象(overload与overwrite)
- Java学习系列(十五)Java面向对象之细谈线程、线程通信(下)
- Java学习系列(十五)Java面向对象之细谈线程、线程通信(下)
- java中浮点型的格式输出(DecimalFormat)
- Eclipse配置struts1.1,实现简单登录
- Eclipse可以运行但是命令行窗口却执行出错的原因