ioFile 迈不过友情╰ 2022-06-10 07:21 131阅读 0赞 一、 FileInputStream (一) API 1.6.0说明 **java.io 类 FileInputStream** java.lang.Object java.io.InputStream **java.io.FileInputStream** **所有已实现的接口:** Closeable public class **FileInputStream** extends InputStream FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。 FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。 **从以下版本开始:** JDK1.0 **另请参见:** File, FileDescriptor, FileOutputStream (二) Constructor <table> <tbody> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">FileInputStream</a></strong>(<a rel="nofollow">File</a> file)<br> 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">FileInputStream</a></strong>(<a rel="nofollow">FileDescriptor</a> fdObj)<br> 通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">FileInputStream</a></strong>(<a rel="nofollow">String</a> name)<br> 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。</p> </td> </tr> </tbody> </table> public staticvoidis1() throwsException{ FileInputStream fis=new FileInputStream("fis.txt"); int b; while((b=fis.read())!=-1){ System.out.println(b); } fis.close(); } public staticvoidis2() throwsException{ FileInputStream fis=new FileInputStream(new File("e:\\fileTest\\1.txt")); int b; while((b=fis.read())!=-1){ System.out.println(b); } fis.close(); } (三) Method 1. 读单个字节 <table> <tbody> <tr> <td style="background-color:#FFFFFF;"> <p> int</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">read</a></strong>()<br> 从此输入流中读取一个数据字节。</p> </td> </tr> </tbody> </table> public staticvoidis3() throwsException{ FileInputStream fis=new FileInputStream(new File("e:\\fileTest\\1.txt")); FileOutputStream fos=new FileOutputStream(new File("e:\\fileTest\\2.txt")); int b=0; while((b=fis.read())!=-1){ fos.write(b); } fos.close(); fis.close(); } 2. 读多个字节 <table> <tbody> <tr> <td style="background-color:#FFFFFF;"> <p> int</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">read</a></strong>(byte[] b)<br> 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。</p> </td> </tr> </tbody> </table> public staticvoidis5() throwsException{ FileInputStream fis=new FileInputStream(new File("e:\\fileTest\\1.txt")); int b; byte[] bytes=newbyte[1024]; while((b=fis.read(bytes))!=-1){ System.out.print(new String(bytes,0,b)); } fis.close(); } 二、 FileOutputStream (一) API1.6.0 说明 **java.io 类 FileOutputStream** java.lang.Object java.io.OutputStream**java.io.FileOutputStream** **所有已实现的接口:** Closeable, Flushable public class **FileOutputStream** extends OutputStream 文件输出流是用于将数据写入 File 或FileDescriptor 的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。 FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter。 **从以下版本开始:** JDK1.0 **另请参见:** File, FileDescriptor, FileInputStream (二) Constructor <table> <tbody> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">FileOutputStream</a></strong>(<a rel="nofollow">File</a> file)<br> 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">FileOutputStream</a></strong>(<a rel="nofollow">File</a> file, boolean append)<br> 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">FileOutputStream</a></strong>(<a rel="nofollow">FileDescriptor</a> fdObj)<br> 创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">FileOutputStream</a></strong>(<a rel="nofollow">String</a> name)<br> 创建一个向具有指定名称的文件中写入数据的输出文件流。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">FileOutputStream</a></strong>(<a rel="nofollow">String</a> name, boolean append)<br> 创建一个向具有指定 name 的文件中写入数据的输出文件流。</p> </td> </tr> </tbody> </table> public staticvoidos1() throws Exception{ FileOutputStream fos=new FileOutputStream(new File("e:\\fileTest\\os.txt")); fos.close(); } 常用这种方式 public staticvoidos2() throws Exception{ FileOutputStream fos=new FileOutputStream("e:\\fileTest\\os2.txt"); fos.close(); } (三) Method <table> <tbody> <tr> <td style="background-color:#FFFFFF;"> <p> void</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">write</a></strong>(byte[] b)<br> 将 b.length 个字节从指定 byte 数组写入此文件输出流中。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p> void</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">write</a></strong>(byte[] b, int off, int len)<br> 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p> void</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">write</a></strong>(int b)<br> 将指定字节写入此文件输出流。</p> </td> </tr> </tbody> </table> 1. 非追加,总是重新输出数据。 public staticvoidos3() throwsException{ FileOutputStream fos=new FileOutputStream("e:\\fileTest\\os2.txt"); byte[] bytes=newbyte[]{110,111,112,113,114}; fos.write(bytes); //fos.write(bytes,2,3); fos.write(98); fos.close(); } 2. 构造输出流时,append 参数设为true,在文件尾追加内容。 public staticvoidos3() throwsException{ FileOutputStream fos=new FileOutputStream("e:\\fileTest\\os2.txt",true); byte[] bytes=newbyte[]{110,111,112,113,114}; fos.write(bytes); //fos.write(bytes,2,3); fos.write(98); fos.close(); } 3. 设置换行 Windows系统:\\r\\n linux系统:\\n 跨系统平台,从系统中获取换行符。 \\r\\n public staticvoidos5() throws Exception{ FileOutputStream fos=new FileOutputStream("e:\\fileTest\\os2.txt",true); byte[] bytes=newbyte[]{110,111,112,113,114}; fos.write(bytes); //fos.write(bytes,2,3); fos.write(("\r\n".getBytes())); fos.close(); } 系统的换行符 public staticvoidos6() throws Exception{ FileOutputStream fos=new FileOutputStream("e:\\fileTest\\os2.txt",true); byte[] bytes=newbyte[]{110,111,112,113,114}; fos.write(bytes); //fos.write(bytes,2,3); fos.write((System.getProperty("line.separator").getBytes())); fos.close(); } (四) 流的异常处理模版 问题分析: 1. 如果流创建后,在流的执行操作中,关闭流之前出现异常,那么流的关闭动作将缺失执行,造成资源的浪费。 2. 如果在流还没有创建时,就出现异常,那么在finally关闭流时,将出现nullPointException,所以finally里面要判断。 public staticvoidos7() throwsException{ FileOutputStream fos=null; try{ fos=new FileOutputStream("e:\\fileTest\\os2.txt",true); byte[] bytes=newbyte[]{110,111,112,113,114}; fos.write(bytes); fos.write((System.getProperty("line.separator").getBytes())); }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(fos!=null){ fos.close(); } }catch(Exception e){ e.printStackTrace(); } } } 三、 BufferedOutputStream (一) API1.6.0 说明 **java.io 类 BufferedOutputStream** java.lang.Object java.io.OutputStream java.io.FilterOutputStream **java.io.BufferedOutputStream** **所有已实现的接口:** Closeable, Flushable public class **BufferedOutputStream** extends FilterOutputStream 该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。 **从以下版本开始:**JDK1.0 (二) ConstructorAndMethod <table> <tbody> <tr> <td colspan="2" style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">BufferedOutputStream</a></strong>(<a rel="nofollow">OutputStream</a> out)<br> 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。</p> </td> </tr> <tr> <td colspan="2" style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">BufferedOutputStream</a></strong>(<a rel="nofollow">OutputStream</a> out, int size)<br> 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p> void</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">write</a></strong>(byte[] b, int off, int len)<br> 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p> void</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">write</a></strong>(int b)<br> 将指定的字节写入此缓冲的输出流。</p> </td> </tr> </tbody> </table> public staticvoidos8() throwsException{ BufferedOutputStream bos=null; try{ bos=new BufferedOutputStream(new FileOutputStream("e:\\fileTest\\os.txt")); bos.write(new byte[]{110,111,112,113}); }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(bos!=null){ bos.close(); } }catch(Exception e){ e.printStackTrace(); } } } 四、 BufferedInputStream (一) AIP1.6.0 说明 **java.io 类 BufferedInputStream** java.lang.Object java.io.InputStream java.io.FilterInputStream **java.io.BufferedInputStream** **所有已实现的接口:** Closeable public class **BufferedInputStream** extends FilterInputStream BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。 **从以下版本开始:** JDK1.0 (二) ConstructorAndMethod <table> <tbody> <tr> <td colspan="2" style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">BufferedInputStream</a></strong>(<a rel="nofollow">InputStream</a> in)<br> 创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。</p> </td> </tr> <tr> <td colspan="2" style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">BufferedInputStream</a></strong>(<a rel="nofollow">InputStream</a> in, int size)<br> 创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p> int</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">read</a></strong>()<br> 参见 InputStream 的 read 方法的常规协定。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p> int</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">read</a></strong>(byte[] b, int off, int len)<br> 从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。</p> </td> </tr> </tbody> </table> public staticvoidis6() throws Exception{ BufferedInputStream bis=null; try{ bis=new BufferedInputStream(new FileInputStream("e:\\fileTest\\os.txt")); byte[] bytes=newbyte[1024]; int b; while((b=bis.read(bytes))!=-1){ System.out.println(new String(bytes,0,b)); } }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(bis!=null){ bis.close(); } }catch(Exception e){ e.printStackTrace(); } } } 小结:4种流的读写方式的效率排序,从高到低依次为: 缓存字节流的按数组存取>>普通字节流的按数组存取>缓存字节流的按单个字节存取>普通字节流的按单个字节存取 五、 应用实例,将文件分割成若干个指定字节大小的文件 public staticvoidcutFile() throwsException{ FileInputStream fis=new FileInputStream("e:\\fileTest\\1.mp4"); byte[] bytes=newbyte[1024*1024*2]; int b; while((b=fis.read(bytes))!=-1){ FileOutputStream fos=new FileOutputStream("e:\\fileTest\\"+UUID.randomUUID().toString()+".mp4"); fos.write(bytes,0,b); fos.close(); } fis.close(); } 六、 流的编码与解码 String-编码 <table> <tbody> <tr> <td style="background-color:#FFFFFF;"> <p> byte[]</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">getBytes</a></strong>()<br> 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p> byte[]</p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">getBytes</a></strong>(<a rel="nofollow">Charset</a> charset)<br> 使用给定的 <a rel="nofollow">charset</a> 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。</p> </td> </tr> </tbody> </table> String-解码 <table> <tbody> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">String</a></strong>(byte[] bytes)<br> 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。</p> </td> </tr> <tr> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">String</a></strong>(byte[] bytes, <a rel="nofollow">Charset</a> charset)<br> 通过使用指定的 <a rel="nofollow">charset</a> 解码指定的 byte 数组,构造一个新的 String。</p> </td> </tr> </tbody> </table> Arrays <table> <tbody> <tr> <td style="background-color:#FFFFFF;"> <p>static <a rel="nofollow">String</a></p> </td> <td style="background-color:#FFFFFF;"> <p><strong><a rel="nofollow">toString</a></strong>(byte[] a)<br> 返回指定数组内容的字符串表示形式。</p> </td> </tr> </tbody> </table> (一) 解码 public staticvoiddecode() throws Exception{ //你你哈哈 utf-8编码 [-28, -67, -96, -28, -67, -96, -27, -109, -120, -27,-109, -120] //你你哈哈 gbk编码 [-60, -29, -60, -29,-71, -2, -71, -2] byte[] utf_8={-28, -67, -96, -28, -67, -96, -27, -109, -120, -27, -109, -120}; System.out.println(new String(utf_8)); System.out.println(new String(utf_8,"utf-8")); byte[] gbk={-60, -29, -60, -29, -71, -2, -71, -2}; System.out.println(new String(gbk)); } (二) 编码 public staticvoidencode() throwsException{ String str="你你哈"; byte[] bytes=str.getBytes(); System.out.println(Arrays.toString(bytes)); byte[] bytesUtf_8=str.getBytes("utf-8"); System.out.println(Arrays.toString(bytesUtf_8)); byte[] bytesGbk=str.getBytes("gbk"); System.out.println(Arrays.toString(bytesGbk)); } (三) 乱码 编码方式与解码方式不一致 public staticvoidmessyCode() throwsException{ String str="你你哈哈"; byte[] bytesUtf_8=str.getBytes("UTF-8"); String gbk=new String(bytesUtf_8,"gbk"); System.out.println(gbk); } 反乱码 public staticvoidencode() throwsException{ String str="你你哈哈"; byte[] bytesUtf_8=str.getBytes("UTF-8"); String gbk=new String(bytesUtf_8,"gbk"); byte[] bytesGbk=gbk.getBytes("gbk"); String getBgkStr=new String(bytesGbk,"utf-8"); System.out.println(getBgkStr); } 上面反乱码的方式,不能解决未知字符介入乱码的问题。如❤等。
相关 ioFile 一、 FileInputStream (一) API 1.6.0说明 java.io 类 FileInputStream java. 迈不过友情╰/ 2022年06月10日 07:21/ 0 赞/ 132 阅读
还没有评论,来说两句吧...