文件字节流
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