IO数据流的介绍及模板
1. IO流的介绍
IO流用来处理设备之间的数据传输,上传文件和下载文件,Java对数据的操作是通过流的方式。
2. Io流的分类
按照数据流向:
输入流 : 读入数据
输出流 : 写出数据
按照数据类型:
字节流(一般情况使用字节流)
字符流(用于文本)
3. IO流的使用情况
什么情况下使用哪种流呢?
如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流。其他用字节流。
如果你什么都不知道,就用字节流,一般情况使用字节流。
重点内容
4. 各种流的使用情况及详细代码块
字节输出流
//字节普通输出流的介绍 **FileOutputStream**
//案列:把一段字符串写入到 F:/test/test.txt 中
public static void main(String[] args) {
//将字符串转换成字节数组
byte[] bytes = "今天下雨了,心情很好!可以不用出去了!".getBytes();
/*
这是jdk1.7新特性 把输出流定义到try的()里面。最后当流调用完以后jvm会自动关闭流。
怎样可以避免写完代码后忘记关闭流,造成资源的浪费。true代表继续在F:/test/test.txt
中的文本末尾继续写。
*/
try (FileOutputStream fos = new FileOutputStream("F:/test/test.txt",true))
{
//调用 write方法 将字符串转换成的字节数组写到目标文本中
fos.write(bytes);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
字节输入流
//字节输入流 ,将内容读取,并打印出来
//这次代码用老式的关流方法
// 刚才我们把字符串写到了F:/test/test.txt中现在我们要从该文本中读取内容,并在Java控制台输出
public static void main(String[] args) throws Exception {
//先让输入流指向空,目的是为了避免代码执行到一半时发生错误时,可以通过判断来使流关闭。
FileInputStream fis = null;
try {
//输入流跟 F:/test/test.txt 打开通道
fis = new FileInputStream("F:/test/test.txt");
//定义一个字节数组缓冲区
byte [] bytes=new byte [1024];
//把数据读入字节数组中,
int len = fis.read(bytes);
//将读取到的数据转换字符串
String s = new String(bytes,0,len);
//打印出来
System.out.println(s);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if(fis!=null) {
//必须要关闭流
fis.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
普通字节流的综合使用案例
//.txt文档的复制案列
/*
srcPath: 要复制的文档
destPath:复制到的位置
*/
public static void copy(String srcPath, String destPath) {
//新特性,流调用完后自动关闭
try (FileInputStream fis = new FileInputStream(srcPath);
FileOutputStream fos = new FileOutputStream(destPath);) {
byte[] bytes = new byte[1024];//字节数组缓冲区
int len ;//为了判断数据是否读取完
//当len的长度等于-1时代表数据读取完了
while ((len = fis.read(bytes)) != -1) {
//读一个写一个
fos.write(bytes, 0, len);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}