javaio流知识点,JAVA中的IO流

1 , JAVA中的IO流import java.io.*;public class TestFileWriterpublic static void main(String[] args)FileReader fr = null; FileWriter fw = null; int b = 0; char[] cbuf = new char[18]; tryfr = new FileReader("E:\\java\\io\\a.txt"); fw = new FileWriter("E:\\java\\io\\b.txt"); while ((b=fr.read(cbuf,0,18))!=-1)fw.write(cbuf,0,18); } } catch(FileNotFoundException e)e.printStackTrace(); } catch(IOException e)e.printStackTrace(); } finallytryfr.close(); fw.close(); } catch(IOException e)e.printStackTrace(); } } }}
2 , 关于JAVA IO流流是没有规范的,集合的作用可以认为用于对流的规范,其实IO中的类很多都是可以完成你要的写操作的,问题看你自己喜欢使用哪个类,不管什么语言流和buffer总是挂钩的,流需要buffer的支持才能体现出流的特性和优势io流主要也就分两大类:一、字节流、字符流二、输入流、输出流最基本的也就是FileInputStream/FileOutputStream和InputStreamReader/OutputStreamReader掌握这两种,其他也确实类似以下是看到别人总结的一些关于io流的,希望对你有帮助Java IO的一般使用原则:一、按数据来源(去向)分类:1、是文件:FileInputStream/FileOutputStream;FileReader/FileWriter2、是byte[]:ByteArrayInputStream/ByteArrayOutputStream3、是Char[]:CharArrayreader/CharArrayWriter4、是String:StringBufferInputStream,StringReader,StringWriter5、网络数据流:InputStream,OutputStream,Reader,Writer二、按是否格式化输出分:1、要格式化输出:PrintStream,PrintWriter三、按是否需要缓冲分:1、 要缓冲:BuffereadInputStream,BuffereadoutputStream;BuffereadReader,BuffereadWriter四、按数据格式分:1、二进制格式(只要不能确定是存文本的):InputStream;OutputStream及其所有带Stream结束的子类2、存文本格式:Reader,Writer及其所有带Reader , Writer的子类五、按输入输出分:1、 输入:Reader,InputStream类型的子类2、输出:Writer,OutputStream类型的子类决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):第一,考虑最原始的数据格式是什么:是否为文本?第二,是输入还是要输出?第三,是否需要转换流:InputStreamReader,OutputStreamReader?第四 , 数据来源(去向)是什么?第五,是否要缓冲:BufferedReader第六,是否需要格式化输出:print?
3,java中关于io流的问题几种可能的异常(IOException的一些子类,这些是有关文件读写方面可能抛出的异常,还可能有其他方面异常,参考JDK API文档的IOException类的子类)总体说有:文件不存在,读取写入出错(如磁盘硬件错误、写保护、无空间等),权限问题(文件被锁定、无访问权限等)EOFException:当输入过程中意外到达文件或流的末尾时 , 抛出此异常 。此异常主要被数据输入流用来表明到达流的末尾 。注意,其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常 。FileLockInterruptionException:当某个线程正在等待获取文件锁定时被另一个线程中断,则由该线程接收此经过检查的异常 。抛出此异常之前,将设置以前被阻塞的线程的中断状态 。FileNotFoundException:当试图打开指定路径名表示的文件失败时,抛出此异常 。在不存在具有指定路径名的文件时,此异常将由 FileInputStream、FileOutputStream 和 RandomAccessFile 构造方法抛出 。如果该文件存在,但是由于某些原因不可访问,比如试图打开一个只读文件进行写入,则此时这些构造方法仍然会抛出该异常 。IIOException:该异常类用于发出关于读取和写入操作的运行时故障的信号 。InterruptedIOException:I/O 操作已中断信号,抛出此异常 。抛出 InterruptedIOException 指示输入或输出传输已经终止 , 原因是执行此操作的线程中断 。字段 bytesTransferred 指示在发生中断之前已成功传输了多少字节 。就是因为会发生无法预料的情况 单独靠程序无论如何也解决不了的情况下 所以才会要用trycatch 读取文件不存在 这个就是无法预料的情况写入文件的时候 文件不存在磁盘已满 这些也都是无法预料的java的输入输出 , 把它理顺了就2个基本点:1、字节流:(复制文件的功能)①fileinputstream输入流 。用来读取诸如图像数据之类的原始字节流,所读取的文件必须是已经存在的哦 。②fileoutstream输出流,用来将数据写入file火filedescriptor的输出流 。2、字符流(解释 , 纯文本的 。)①inputstreamreader输入流,,可以将一个字符流中的字节解码成字符 。②outputstreamwriter输出流,将写入的字符编码策划那个子节后写入一个字节流 。主要理解这些就行了,其他的再延伸吧 。【javaio流知识点,JAVA中的IO流】
4,java中什么是IO流理解Java的IO流,首答先要把视角放在内存上,而不是放在文件上 。InputStream是用来写入的没错,但不是写入文件中,而是写入内存中 。所以InputStream的作用是从文件中读取数据然后写入内存中或者说写入到正在运行的程序中 。而OutputStream同理,是从内存/程序中将数据推送出去,把数据保存到文件中 。以Java程序作为主视角,你就能懂了 。Input读取是为了读给程序用,Output写出是程序把数据输出到硬盘上了 。I/O为input(输入)/ output(输出)的简称 , 在Java中input和output代表将数据从其他地方写入程序例如从文件中读取文件 , 将文件内容保存在程序内存中,output代表程序将数据输出到某些地方,例如利用程序向文件中保存内容等,在Linux系统中,有一切皆文件的概念,不管对于任何文件,设备,网络设备等 , 在Linux下都被当做文件来进行处理;在Java中IO操作是很重要的一块内容,从数据的传输方式来区分的话,可以分为字符流和字节流;这两者的主要区别在于数据流当中数据的最小单元,字节流代表读取数据的最小单位是字节,读取的时候可以一个字节一个字节的获取内容;字符流代表的是读取内容的时候是按照一个字符一个字符的读取;一个字符根据编码格式的不同,可能会包含多个字节 , 比如我们通常使用的utf-8的编码格式 , 在程序读取处理数据的时候,会根据编码格式从指定的编码表中获取到数据的字节数,然后再去获取指定字节大小的数据;在一般我们处理数据的时候,如果是处理文本类数据,可以优先考虑使用字符流,如果处理其他类型的数据 , 比如图像,视频等使用字节流进行处理;从java源码中我们可以看到字节流的处理是以InputStream和OutputStream两个为基类,派生出很多的子类进行数据的处理,字符流的处理是以Reader和Writer两个为基类,派生出其他的子类进行数据处理;在IO操作中 , 根据数据的传输方向,可以区分为输入流与输出流 , 其中输入输出方向的参考物是以程序为标准,将数据从数据源(比如文件,网络)中读取到程序中表示输入流;程序将数据输出到其他地方(比如文件,网络)中表示输出流;输入输出都是以程序来进行参考;在java中我们可以根据类的命名区分出处理的是输入流还是输出流:InputStream和Reader及其子类代表的输入流的操作,OutputStream和Writer及其子类代表的是输出流的操作;在java中除了这些操作上述的基本类之外,java还提供了处理文件的类File,使用File类创建的对象 , 可以进行文件或者文件夹的创建,删除,重命名等操作 。在File对象中,包含了文件的基本属性 , 比如文件名,文件路径,文件大小,修改时间等 。流是1组有顺序的,有出发点和终点的字节集合,是对数据传输的总称或抽象 。即数据在两装备间的传输称为流 , 流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作 。io流的分类?根据处理数据类型的不同分为:字符流和字节流?根据数据流向不同分为:输入流和输出流流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象 。即数据在两设备间的传输称为流 。流的本质是数据传输,根据数据传输特性将流抽象为各种类 , 方便更直观的进行数据操作 。IO流的分类:根据处理数据类型的不同分为:字符流和字节流;根据数据流向不同分为:输入流和输出流 。5,Java中的IO流的基本知识IO可以理解为JAVA用来传递数据的管道创建一个IO,就相当于将管道与某个数据源连接到一起了.如 new FileInputStream(D:\\123.txt)这个就将这个FileInputStream与d:\123.txt这个文件连接在一起了,以后的读操作就可以理解为通过这个管道与123.txt进行数据传递了.这个管道可以连接到很多地方,如一个数组,一个网络,用户的控制台,一个对像,或者是一个流上.这样就产生了不同的IO.http://blog.csdn.net/Mailbomb/archive/2009/04.aspx这哥们的blog , 写的相当详细希望对你有帮助1、与外部设备和其它计算机进行交流的输入输出操作 , 尤其是对磁盘的文件操作,是计算机程序重要的功能,任何计算机语言都必须对输入输出提供支持 。Java也不例外 , 它的输入输出类库中包含了丰富的系统工具,这些类被放在java.io包中 。在该类库中,除了定义文件输入输出操作外,还定义了许多用来和其他外设进行信息交换的类 。2、流(Stream)指的是在计算机的输入与输出之间运动的数据序列:输入流代表从外设流入计算机的数据序列;输出流代表从计算机流向外设的数据序列 。流式输入输出是一种很常见的输入输出方式,它最大的特点是数据的获取和发送均沿数据序列顺序进行:每一个数据都必须等待排在它前面的数据读入或输出之后才能被读写,每次读写操作处理的都是序列中剩余的未读写数据中的第一个,而不能够随意选择输入输出的位置 。磁带机是实现流式输入输出的典型设备 3、InputStream和OutputStream是java.io包中的两个抽象类,他们分别是其他所有输入、输出流类的父类 。其他所有输入流类都是继承了InputStream的基本输入功能并根据自身属性对这些功能加以扩充;同样,其他所有输出流类也都是继承了OutputStream类的基本输出功能并加以扩展的 4、File类是IO包中惟一代表磁盘文件本身的对象 , File对象定义了一些与平台无关的方法来操纵文件 创建File类对象时需指明它所对应的文件或目录名 。File类共提供了4个不同的构造方法,以不同的参数形式灵活地接收文件和目录名信息 5、FileReader和FileWrite类分别继承自Reader类和Writer类,继承关系如图6-2所示 。FileReader类用于读取文件;FileWrite类用于将数据写入文件 。在使用这两个类之前,必须调用其构造方法创建相应的对象,然后才能调用相应的read()或write()方法进行文件的读写操作 6、BufferedReader和BufferedWrite类分别继承自Reader类和Writer类,BufferedReader类用来从字符输入流中读取文本 , 缓冲各个字符,从而实现字符、数组和行的高效读取 。BufferedWrite类用于将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入 。7、LineNumberReader类是BufferedReader类的直接子类 。该类允许对文本输入数据流加入行号 。此类定义了方法setLineNumber(int)和getLineNumber() , 它们可分别用于设置和获取当前行号 。默认情况下,行编号从0开始 。该行号随数据读取在每个行结束符处递增,并且可以通过调用setLineNumber(int)更改行号 。但要注意的是,setLineNumber(int)不会实际更改流中的当前位置;它只更改将由getLineNumber()返回的值 8、LineNumberReader类是BufferedReader类的直接子类 。该类允许对文本输入数据流加入行号 。此类定义了方法setLineNumber(int)和getLineNumber(),它们可分别用于设置和获取当前行号 。默认情况下,行编号从0开始 。该行号随数据读取在每个行结束符处递增 , 并且可以通过调用setLineNumber(int)更改行号 。但要注意的是,setLineNumber(int)不会实际更改流中的当前位置;它只更改将由getLineNumber()返回的值使用RandomAccessFile类随机读写文件时,在创建了一个RandomAccessFile对象之后 , 该文件即对文件描述句柄处于打开状态 。此时,文件的指针处于文件开始位置 。可以通过seek(long pos)方法设置文件指针的当前位置,以进行文件的快速定位 , 然后使用相应的read()和write()方法对文件进行读写操作 。在对文件的读写操作完成后,调用close()方法关闭文件9、FileInputStream和FileOutputStream类主要用来处理以“位为主”的输入输出操作 。其中,FileInputStream类继承于InputStream类;FileOutputStream类继承于OutputStream类 。与RandomAccessFile类所不同的是,FileInputStream和FileOutputStream类中提供的文件处理方式是文件中数据流的顺序读写 , 而不是利用文件指针进行定位的随机读写 10、Java中的PipedInputStream和PipedOutputStream类提供了利用管道方式进行数据输入输出管理 。管道流用来将一个程序或者线程的输出连接到另外一个程序或线程作为输入,使得相连线程能够通过PipedInputStream和PipedOutputStream类进行数据交换 。PipedInputStream和PipedOutputStream类也是InputStream和OutputStream类的直接子类 。这两个类必须结合使用,其中,管道输入流作为管道的接收端、管道输出流作为管道的发送端,在程序设计中应注意数据的传输方向 顺序输入流SequenceInputStream是InputStream的直接子类,其功能是将多个输入流连接在一起 , 形成单一的输入数据流,没有对应的输出数据流存在 。顺序输入流SequenceInputStream由多个输入流构造而成,它从输入流的有序集合开始,并从第一个输入流开始读取 , 直到文件末尾,接着从第二个输入流读?。?依次类推,直到到达顺序输入流包含的最后一个输入流的文件末尾为止很多JAVA书中都有要点就是一条 开了数据流要记得关上 , 要不然系统离崩溃就不远了刚刚手写了一个文件写入的方法, 源码贴上来package com.test;import java.io.bufferedreader;import java.io.file;import java.io.fileoutputstream;import java.io.ioexception;import java.io.inputstreamreader;public class filetestpublic static void main(string[] arg0) throws ioexception filetest ft=new filetest(); ft.write(); } public void write() throws ioexception string path=""; bufferedreader br=new bufferedreader(new inputstreamreader(system.in)); system.out.println("please input file path:"); path=br.readline(); file file= new file(path); string contents=""; if(file.exists()) fileoutputstream fops=new fileoutputstream(file,true); system.out.println("please input the matter what you will put into file:"); contents=br.readline(); byte[] ct=contents.getbytes("utf-8"); fops.write(ct); fops.close(); }else file.createnewfile(); } br.close(); } public void copy() 至于这个复制不知道你的意思是要把刚刚写的数据复制到其他的文件呢还是要把刚刚写入的整个文件复制到其他文件中,注意数据和文件之分. 其实这个不难,只要把第一个方法的部分字段定义成全局的就可以任何地方都可以引用,就可以复制了 }}}IO读写是两个不同的分支,通常都是分开单独使用的 。可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容 。BufferedReader bre = null;try String file = "D:/test/test.txt";bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环System.out.println(str);//原样输出读到的内容};备注: 流用完之后必须close掉,如上面的就应该是:bre.close() , 否则bre流会一直存在,直到程序运行结束 。可以通过“FileOutputStream”创建文件实例 , 之后过“OutputStreamWriter”流的形式进行存储,举例:OutputStreamWriter pw = null;//定义一个流pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例pw.write("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次writepw.close();//关闭流备注:文件流用完之后必须及时通过close方法关闭 , 否则会一直处于打开状态,直至程序停止,增加系统负担 。

    推荐阅读