我的网站:欢迎来访问嗷
IO流
分类
方向:输入流,输出流
单位:字节流,字符流
代码中具体分类
输入流:
字节:InputStream
字符: Reader
输出流:
字节:OutputStream
字符: Write
输入输出都是抽象类,无法直接创建
输入用FileInputStream类实现
输出用FileoutputStream类实现
字节输入流FileInputStream
读取输入流的三种方式
Demo
package com.ifueen.classtest.fileinputstream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class FileInputStreamTest {
/*
* 输入流
* */
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream file = new FileInputStream("my.txt");
//第一种读取
/*int c = file.read();; //定义变量接收每次读取的值
while (c!=-1) { //判断是否还有字符
System.out.print((char)c); //打印输出
c = file.read();
}*/
//第二种读取
byte [] arr = new byte[2]; //定义数组来决定每次读取的元素
/*int num=file.read(arr);
while (num!=-1) {
String string = new String(arr,0,num);
System.out.print(string);
num=file.read(arr);
}*/
//第三种读取
byte [] arr1 = new byte[4];
int read = file.read(arr1, 0, 4);
while (read!=-1) {
System.out.print(new String(arr1));
read = file.read(arr1, 0, 4);
}
}
}
字节输出流FileOutputStream
输出的几种方式
Demo
package com.ifueen.classtest.fileoutputstream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamTest {
/*
* 输出流
* */
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//第一种输出
FileOutputStream output = new FileOutputStream("sb.txt");
//output.write(5986);
//第二种输出
byte [] arr = {15,36,89,66,15,69};
//output.write(arr);
//第三种:输出为中文
String str = "乌斯怀亚的灯塔";
byte[] bytes = str.getBytes(); //利用方法转换为byte数组
output.write(bytes);
for (byte b : bytes) {
System.out.println(b);
}
//第四种:不覆盖以前内容
FileOutputStream output1 = new FileOutputStream("sb.txt",true);
String str1 = ",亮着...亮着...";
byte[] bytes1 = str1.getBytes(); //利用方法转换为byte数组
output.write(bytes1);
}
}
字符输入流FileReader
Demo
package com.ifueen.classtest.reader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class ReaderTest {
/*
* 读取字符流
* */
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//第一种方式
FileReader reader = new FileReader("sb.txt");
//int read = reader.read();
//System.out.println(read);
//第二种方式
char[] arr = new char[3];
int n;
while((n=reader.read(arr,0,3))!=-1){
System.out.print(new String(arr,0,n));
}
}
}
字符输出流FileWriter
Demo
package com.ifueen.classtest.writer;
import java.io.FileWriter;
public class WriterTest {
/*
* 字符输出流
* */
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
FileWriter fileWriter = new FileWriter("能不能给我吃一口.txt");
String str = "就不能给我吃一口吗";
char[] cs = str.toCharArray();
fileWriter.write(cs);
fileWriter.flush(); //刷新缓冲区
fileWriter.close(); //关闭输出流
//不覆盖内容的输出
FileWriter fileWriter1 = new FileWriter("能不能给我吃一口.txt",true);
String str1 = ",我再也快乐不起来了";
char[] cs1 = str1.toCharArray();
fileWriter1.write(cs1);
fileWriter1.flush(); //刷新缓冲区
fileWriter1.close(); //关闭输出流
}
}
编码问题
编码和解码的时候编码集不一致
编码:按照某种编码集去存储数据
解码:按照某种编码集去读取数据
乱码问题:
1.读取中文数据的时候,只取了部分字节
2.编码和解码的解码集不一致,最常用的是UTF-8
3.有些编码集本身就不支持中文ISO
转换流
字节输入流转换为字符流 InputStreamReader
字符输入流转换为字节流 OutputStreamWriter
异常的处理
传统的方式 try{
可能出现异常的代码
}catch(Exception e){
对异常进行处理
}finally{
最终执行的代码
}
先开后关
jdk1.7 对于需要关闭的流新的方式
try(需要关闭的资源){
}catch(Exception e){
对异常进行处理
}
jdk1.7写法Demo
package com.ifueen.classtest.exception;
import java.io.FileInputStream;
import java.io.FileOutputStream;import com.sun.org.apache.bcel.internal.generic.NEW;
public class ExceptionDemo {
/*
* 异常Demo
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
try( FileInputStream inputStream = new FileInputStream("sb.txt"); //这里存放需要关闭的代码
FileOutputStream outputStream = new FileOutputStream("sb.txt")){
//这里存放可能会出错的代码
byte [] arr = new byte[50];
int read = inputStream.read(arr);
while (read!=-1) {
System.out.println(new String(arr,0,read));
read = inputStream.read(arr);
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}