package cn.sasa.demo2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.management.RuntimeErrorException;
public class IODemo1 {
public static void main(String[] args) throws IOException {
/**
* 字节流 、 字符流
* 程序到文件,输出 output
* 文件到程序,输入 input
*
*/
//output();
//outputAppend();
//tryIOException();
input();
}
/***
* 文件的写入 java.io.OutputStream 所有字节输出流的父类
*
* 作用: 从java程序 写出文件 写任意文件
*
* write(int b) 写入一个字节 write(byte[] b) 写入字节数组
* write(byte[] b, int off, int len)
* close() 关闭流对象,释放资源 flush()
*
* FileOutputStream 写入数据文件
*
* 步骤:
* 1、创建流子类的对象,绑定数据目的, 流对象的构造方法可以创建文件,如果文件存在,那么覆盖原有的文件
* 2、调用write
* 3、close()释放资源
*
*/
static void output() throws IOException {
FileOutputStream output = new FileOutputStream("d:/sasa/test1221.txt");
// 写入一个字节
// output.write(97);
// 写入字节数组
byte[] writeByte = { 97, 98, 99, 100 };
output.write(writeByte);
// 写字节数组的一部分
output.write(writeByte, 1, 2);
// 写入字符串的字节数组
output.write("lalala".getBytes());
output.close();
System.out.println("ok");
}
/***
* 文件的续写和换行
* @throws IOException
*
*/
static void outputAppend() throws IOException {
File file = new File("d:/sasa/test1221.txt");
//第二个参数表示在原来的基础上追加字节
FileOutputStream output = new FileOutputStream(file, true);
output.write("hello".getBytes());
//换行 \r\n
output.write("\r\n".getBytes());
output.write("blabla".getBytes());
output.close();
System.out.println("ok");
}
/***
* IO流的异常处理
* try catch finally
*/
static void tryIOException() {
FileOutputStream output = null;
try {
output = new FileOutputStream("d:/sasa/test1221.txt",true);
output.write(100);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e.getMessage());
throw new RuntimeErrorException(null, "文件写入失败");
}finally {
try {
//对象如果建立失败,没有占用资源,不用释放
if(output != null)
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeErrorException(null, "关闭资源失败");
}
}
}
/***
* 字节输入流
* java.io.InputStream 所有字节输入流的父类
* 作用:读取任意文件,每次读取1字节
*
* int read()读取1字节
* int read(byte[] b)
*
* FileInputStream 读取文件
* 步骤:
* 1、创建字节输入流的子类对象
* 2、调用read() 每执行一次,自动读取下一个字节,返回值返回读取到的字节,如果是结尾,则返回-1
* 3、关闭资源
* @throws IOException
*/
static void input() throws IOException {
FileInputStream input = new FileInputStream("d:/sasa/test1221.txt");
//读取一个字节
// int readInt = input.read();
// System.out.println(readInt);
// int readInt1 = input.read();
// System.out.println(readInt1);
// int readInt2 = input.read();
// System.out.println(readInt2);
// int readInt3 = input.read();
// System.out.println(readInt3);
// int content = 0;
// while((content = input.read()) != -1) {
// //content = input.read();
// System.out.print((char)content);
// }
// //int read(byte[] b) 读取字节数组
// byte[] inputByte = new byte[2];//2字节2字节读取
// int len = input.read(inputByte);//返回的是读取到的有效字节,-1表示已读完
// System.out.println(new String(inputByte));
// System.out.println(len);
int len = 0;
byte[] inputByte = new byte[4];
while((len = input.read(inputByte)) != -1) {
System.out.print(new String(inputByte,0,len));
}
input.close();
}
}