IO读写
InputStream、OutputStream 基于字节操作的 IO
InputStream基本使用:
InputStream inputStream = new FileInputStream("D:\\log.txt"); byte[] bytes = new byte[inputStream.available()]; inputStream.read(bytes); String str = new String(bytes, "utf-8"); System.out.println(str); inputStream.close();
OutputStream基本使用:
OutputStream outputStream = new FileOutputStream("D:\\log.txt",true); // 参数二,表示是否追加,true=追加 outputStream.write("你好,老王".getBytes("utf-8")); outputStream.close();
Writer、Reader 基于字符操作的 IO
Reader使用:
Reader reader = new FileReader(filePath); BufferedReader bufferedReader = new BufferedReader(reader); StringBuffer bf = new StringBuffer(); String str; while ((str = bufferedReader.readLine()) != null) { bf.append(str + "\n"); } bufferedReader.close(); reader.close(); System.out.println(bf.toString());
Writer使用:
Writer writer = new FileWriter("D:\\log.txt",true); // 参数二,是否追加文件,true=追加 writer.append("老王,你好"); writer.close();
File 基于磁盘操作的 IO
字节流的文件包括图片,音乐,文本等
File fin = new File(inPath); File out = new File(outPath); FileInputStream is = new FileOutputStream(out); FileOutputStream os= new FileInputStream(fin); byte[] bytes = new byte[512]; int n = 0; while ((n = is.read(bytes)) != -1) { os.write(bytes); } is.close(); os.close();
字符流文件主要是文本文件
File fin = new File(inPath); File out = new File(outPath); FileReader is = new FileReader(fin); FileWriter os= new FileWriter(out); char []a = new char[1024]; int n = 0; while ((n = is.read(a)) != -1) { os.write(a,0,n); } is.close(); os.close();
Socket 基于网络操作的 IO
参考:
http://www.apigo.cn/2018/11/09/javacore5/
关于readLine()阻塞的问题:
误以为readLine()是读取到没有数据时就返回null(因为其它read方法当读到没有数据时返回-1),而实际上readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null;因为readLine()阻塞后,System.out.println(message)这句根本就不会执行到,所以在接收端就不会有东西输出。要想执行到System.out.println(message),一个办法是发送完数据后就关掉流,这样readLine()结束阻塞状态,而能够得到正确的结果,但显然不能传一行就关一次数据流;另外一个办法是把System.out.println(message)放到while循环体内就可以。
readLine()只有在数据流发生异常或者另一端被close()掉时,才会返回null值。
如果不指定buffer大小,则readLine()使用的buffer有8192个字符。在达到buffer大小之前,只有遇到"/r"、"/n"、"/r/n"才会返回。
本文来自博客园,作者:LeeJuly,转载请注明原文链接:https://www.cnblogs.com/peterleee/p/9373766.html
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号