文件字节流
FileInputStream通过字节的方式读取文件,适合读取所有类型文件(图像、视频、文本文件等)。Java也提供了FileReader
专门读取文本文件。
FileOutputStream
通过字节的方式写数据到文件,适合所有类型文件。Java也提供了FileWriter专门写入文本文件。
【示例1】将文件内容读取到程序中。
import java.io.*; public class Demo02 { public static void main(String[] args) { FileInputStream fis =null; try { fis = new FileInputStream("d:/a.txt"); //内容是:abc StringBuilder sb = new StringBuilder(); int temp = 0; while((temp=fis.read())!=-1){ sb.append((char)temp); } System.out.println(sb); } catch (Exception e) { e.printStackTrace(); }finally{ try{ if(fis!=null){ fis.close(); //流对象,使用完后必须关闭!!这种写法,保证了即使遇到异常情况,也会关闭流对象。 } }catch(IOException e){ e.printStackTrace(); } } } } |
【示例2】将字符串/字节数组的内容写入到文件中
public class Demo03 { public static void main(String[] args) { FileOutputStream fos = null; String string = "北京尚学堂欢迎您!"; try { fos = new FileOutputStream("d:/a.txt",true); //true表示内容会追加到文件末尾;false表示重写整个文件内容。 fos.write(string.getBytes()); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(fos!=null){ fos.close(); } } catch (IOException e) { e.printStackTrace(); } } } } |
【示例3】利用文件流实现文件的复制功能
public class Demo04 { public static void main(String[] args) { copyFile("d:/a.txt", "d:/b.txt"); //将a.txt内容拷贝到b.txt } /** * 将src文件的内容拷贝到dec文件 * @param src 源文件 * @param dec 目标文件 */ static void copyFile(String src, String dec) { FileInputStream fis = null; FileOutputStream fos = null; byte[] buffer = new byte[1024]; // 为了提高效率,设置缓存数组! int temp = 0; try { fis = new FileInputStream(src); fos = new FileOutputStream(dec); while ((temp = fis.read(buffer)) != -1) { fos.write(buffer, 0, temp); } } catch (Exception e) { e.printStackTrace(); } finally { try { if(fos!=null){ fos.close(); } } catch (IOException e) { e.printStackTrace(); } try { if(fis!=null){ fis.close(); } } catch (IOException e) { e.printStackTrace(); } } } } |
字节数组流
ByteArrayInutStream和ByteArrayOutputStream经常用在需要流和数组之间转化的情况!
说白了,FileInputStream是把文件当做数据源。ByteArrayInputStream则是把内存中的”某个数组对象”当做数据源。
【示例4】简单测试ByteArrayInputStream 的使用
public class Demo05 { public static void main(String[] args) { byte[] b = "abcdefg".getBytes(); test(b); } public static void test(byte[] b){ ByteArrayInputStream bais = null; StringBuilder sb = new StringBuilder(); int temp = 0; int num = 0; //用于保存读取字节数 try { bais = new ByteArrayInputStream(b); while((temp = bais.read())!=-1){ sb.append((char)temp); num++; } System.out.println(sb); System.out.println("读取的字节数:"+num); }finally{ try { if(bais!=null){ bais.close(); } } catch (IOException e) { e.printStackTrace(); } } } } |
本节我们先讲到这里,下节我们继续……
「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。
笔记包含从浅入深的六大部分:
A-Java入门阶段
B-数据库从入门到精通
C-手刃移动前端和Web前端
D-J2EE从了解到实战
E-Java高级框架精解
F-Linux和Hadoop