成都前十名传媒网站建设,高米店网站建设公司,外贸营销推广的手段,深圳短视频推广一、Java流式输入输出原理Java对于输入输出是以流(Stream)的方式进行的#xff0c;JDK提供各种各样的“流”类#xff0c;以获取不同类型的数据。可以理解为将管道插入到文件中#xff0c;然后从管道获取数据。这个管道外边还可以套管道#xff0c;外边的管道对数据进行处理…一、Java流式输入输出原理Java对于输入输出是以流(Stream)的方式进行的JDK提供各种各样的“流”类以获取不同类型的数据。可以理解为将管道插入到文件中然后从管道获取数据。这个管道外边还可以套管道外边的管道对数据进行处理即套了“处理流”。二、输入输出流分类按功能数据流、处理流按方向输入流、输出流按数据单位字节流、字符流2个字节Java.io内的流类型继承自一下四种2种输入输出 * 2中数据单位(字节 InputStream、OutputStream、字符Reader、WriterTip这里的输入输出是站在程序角度来看的三、字节流和处理流字节流从节点读写数据如文件、内存处理流套在字节流外对数据进行处理为程序提供更强大的读写能力3.1 字节流类型类型字节流1字节InputStreamOutputStream字符流2字节ReaderWriterFileFileFileInputStreamFileOutputStreamFileReaderFileWriterMemoryArrayByteArray/CharArray)ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriterMemoryString(String)--StringReaderStringWriterPipe(Piped)PipedInputStreamPipedOutputStreamPipedReaderPipedWriter3.2 处理流类型处理类型字节InputStream/SteamOutputStream字符ReaderWriterBufferingBufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriterFilteringFilterInputStreamFilterOutputStreamFilterReaderFilterWriterbytes和chaacter之间转换InputStreamReaderOutputStreamWriterObject SerializationObjectInputStreamObjectOutputStreamData conversionDataInputStreamDataOutputStreamCountingLineNumberInputStreamLineNumberReaderPeeking aheadPushbackInputStreamPushbackReaderPrintingPrintStreamPrintWriter四、字节流InputStream以字节形式向程序输入数据8bit基本步骤新建FileInputStream对象in打开文件trynew一个文件路径的对象给incatchFileNotFoundException读取文件try: 判断in.read()是不是-1 是的话就到头了就不读了、关闭incatchIOException总结 以字节的形式挨个读取输出时要用(char)将ASC码转换出来FileInputStream对象new、赋值、.read()、close()两个异常FileNotFoundException、IOException public static void main(String[] args) {int b 0;// 新建一个FileInputStream对象FileInputStream in null;try {// 给FileInputStream赋值in new FileInputStream(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\number.txt);}catch (FileNotFoundException e){System.out.println(系统找不到指定文件);System.exit(-1);// 系统非正常退出}// 开始读取long num 0; // 记录读取了多少个数字try {while ((b in.read() )! -1){ // 主要是in.read()System.out.println((char)b);num;}in.close(); // 关闭输入流System.out.println();System.out.println(总共读了 num 个字节);}catch(IOException e){System.out.println(文件读取错误);}}OutputStream新建new一个OutputStream对象null读写文件名对应一个对象赋值给上面新建的对象这里存在找不到文件的可能FileNotFoundException将东西写到对应的OutputStream中存在复制失败的可能IOException关闭各种close(), 也要IOException public static void main(String[] args) {FileInputStream in null;FileOutputStream out null;try {// 新建 以下需catch FileNotFoundExceptionin new FileInputStream(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\number.txt);out new FileOutputStream(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\number2.txt);// 读写。 以下需catch IOExceptionint b 0;while ((b in.read()) ! -1){out.write((char)b);}// 关闭in.close();out.close();}catch(FileNotFoundException e){System.out.println(系统没有找到指定文件);System.exit(-1);}catch (IOException e){System.out.println(读写错误);}Reader/Writer注意这里的writer要写成String.valueOf(i)因为int是4个字节API里写入了低16位的2个字节忽略了高16位的2个字节。 所以在输入到文件时不妨吧整形转为char 或者字符串fw.write(String.valueOf(12));
fw.write(Character.valueOf(1)); public static void main(String[] args) {FileReader fr null;FileWriter fw null;try {fr new FileReader(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\number.txt);fw new FileWriter(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\number3.txt);// 读写for(int i 0; i 30; i){fw.write(String.valueOf(i));}// 关闭fr.close();fw.close();}catch (FileNotFoundException e){System.out.println(找不到指定文件);}catch (IOException e){System.out.println(文件复制错误);}}五、处理流5.1 Buffer缓冲流缓冲是内存中的一块区域数据在内存中缓冲然后Flush()立刻写出,需要在close()将缓冲区内容强行输出否则可能没有输出去。如果没有buffer是读一个写一个很慢如果有缓冲区先放内存里读完后统一写出去底层会快很多。BufferedInputStream构造函数 BufferedInputStream( InputStream in) 或者 InputStream in , int size)不明白这个mark()和reset()是干啥的。。。 public static void main(String[] args) {FileInputStream fis null;try {fis new FileInputStream(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\number.txt);BufferedInputStream in new BufferedInputStream(fis);// mark一下in.mark(2);// 输出do re mi fint c 0;for (int i 0; i 10 (c in.read() )! -1; i){System.out.println((char)c);}// reset 输出do re mi fin.reset();for (int i 0; i 10 (c in.read() )! -1; i){System.out.println((char)c);}// 关闭in.close();fis.close();}catch (FileNotFoundException e){System.out.println(未找到指定文件);}catch (IOException e){System.out.println(读写错误);}}BufferedReader/ BuffreedWriterbw.write() 配合 bw.newLine() 向文件里写最后写操作要进行.flush()才能写进去不然在缓存里br.readLine() 读取整行bw new BufferedWriter(new FileWriter(文件路径)) 真的像是包在字符流外边的管道br new BufferedReader(new FileReader(文件路径)) 最后要.close()以上要配合IOException()的catch操作 public static void main(String[] args) {BufferedWriter bw null;BufferedReader br null;try {bw new BufferedWriter(new FileWriter(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\numBufferWriter.txt));String s null;for(int i 0; i 10; i){s String.valueOf(Math.random());bw.write(s);bw.newLine();}// 重要如果不flush是写不到文件里的bw.flush();br new BufferedReader(new FileReader(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\numBufferWriter.txt));while ((s br.readLine()) ! null){ // 这里是null来判断System.out.println(s);}// 关闭两个处理流bw.close();br.close();}catch (IOException e){System.out.println(系统错误);}}5.2 转换流InputStreamReader 和 OutputStreamWriter如果我们用FileOutputStream流往文件里写东西是一个字节一个字节的写外面套上OutputStreamWriter就是一个字符一个字符的写了。新建:OutputStreamWriter osw new OutputStreamWriter(new一个FileOutputStream对象, 编码格式)在FileOutputStream中可以选择是否true 如果true就不会覆盖原来的直接接着写osw.write(内容)osw.close() public static void main(String[] args) {try {// 新建OutputStreamWriter osw new OutputStreamWriter(new FileOutputStream(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\numTransfrom1.txt));// 写入 .write()osw.write(hello transform);//------编码方式 UTF8System.out.println(osw.getEncoding());// 关闭 .close()osw.close();// 指定编码 new OutputStreamWriter(new FileoutputStream(文件路劲, true),编码格式)// 加了true就在原有的文件下面接着写否则就覆盖了// 就用上面的osw就行了osw new OutputStreamWriter(new FileOutputStream(D:\\工作\\编程\\after 2022.11\\KuangShengShuo\\src\\com\\baidu\\File\\numTransfrom2.txt,true),ISO8859_1);osw.write(hello world again!);System.out.println(osw.getEncoding());osw.close();}catch (IOException e){System.out.println(系统错误);}}