输入inputStream
import java.io.FileInputStream;
import java.io.IOException;
/*
int read()从输入流中读取数据的下一个字节
int read(byte[] b)从输入流中读取一定数量的字节,并将其储存在缓冲区数组b中
void close()关闭输入流并且释放资源
1.创建对象
2.使用对象中的read方法
3释放资源
*/
public class FileInputStream01 {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream =new FileInputStream("D:\\学习\\b.txt");
//int len =fileInputStream.read();
// System.out.println(len);
/*
(len=fileInputStream.read())!=-1判断变量len是否不等于-1
*/
int len=0;
while ((len=fileInputStream.read())!=-1){
System.out.println(len);
}
fileInputStream.close();
}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
/*
字节输入流,一次读取多个字节的方法
int read(byte[] b)从输入流中读取一定数量的字节,并将其储存在缓冲区中数组b中
1.方法的参数byte[]的作用是什么
起到缓冲作用存储每次读取到的多个字节
数组的长度一般定义为1024,或者为1024的整数倍
2.方法的返回值int是什么
每次读取的有效值
String类的构造方法
String(byte[] bytes)把字节数组转换为字符串
*/
public class FileInputStream02 {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream =new FileInputStream("D:\\学习\\b.txt");
// byte[] bytes =new byte[3];//每次读取的个数
// int len =fileInputStream.read(bytes);
// System.out.println(len);
// System.out.println(Arrays.toString(bytes));
// System.out.println(new String(bytes));//读取三位
// len =fileInputStream.read(bytes);
// System.out.println(len);
// System.out.println(new String(bytes));//读取后面三位0
/*
发现以上读取为重复读取
可以使用循环优化
*/
byte[] bytes=new byte[1024];
int len=0;
while ((len=fileInputStream.read(bytes))!=-1){
//把字节数组的一部分转换为字符串offset数组开始索引‘length转换字节的个数
System.out.println(new String(bytes,0,len));
}
fileInputStream.close();
}
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
实列,复制图片
1.创建2个对象,FileInputStream, FileOutputStream
2.读取
3.写入
*/
public class FileInputStream03 {
public static void main(String[] args) throws IOException {
long s =System.currentTimeMillis();
//1.创建对象
FileInputStream fileInputStream =new FileInputStream("D:\\学习\\a1\\1.png");
FileOutputStream fileOutputStream =new FileOutputStream("D:\\学习\\a2\\1.png");
//2.读取
// int len =0;
// while ((len=fileInputStream.read())!=-1){
// //打印输出
// //System.out.println(len);
// //写入
// fileOutputStream.write(len);
// }
//使用数组缓冲写入
byte[] bytes =new byte[1024];
//使用字节输入流对象中的read方法
int len =0;//每次读取的有效字节个数
while ((len=fileInputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
}
fileInputStream.close();
fileOutputStream.close();
long e=System.currentTimeMillis();
System.out.println("复制耗时间"+(e-s)+"毫秒");
}
}
字符流 Reader,
/*
字符输入流
int read() 读取单个字符
int read(char[] cbuf)一次读取多个字符,并将字符写入数组
void close()释放资源
FileReader文件字符输入流
*/
public class Demo02Reader {
public static void main(String[] args) throws IOException {
//创建对象
FileReader fileReader=new FileReader("D:\\学习\\b.txt");
// int len =0;
// while ((len=fileReader.read())!=-1){
// System.out.println((char) len);
// }
char[] chars=new char[1024];
int len =0;
while ((len=fileReader.read(chars))!=-1){
System.out.println(new String(chars,0,len));
}
fileReader.close();
}
}
Wirter
import java.io.FileWriter;
import java.io.IOException;
/*
void close()
关闭流,先刷新。
void flush()
刷新流。
String getEncoding()
返回此流使用的字符编码的名称。
void write(char[] cbuf, int off, int len)
写入字符数组的一部分。
void write(int c)
写一个字符
void write(String str, int off, int len)
写一个字符串的一部分。
1.创建对象
2.使用FileWirter中的方法,把数据写入到内存缓冲区域
3.使用flush,把内存缓冲区域的数据,刷新到文件中
4.释放,会先把内存缓冲区的数据刷新到文件中
续写
*/
public class Demo01Wirter {
public static void main(String[] args) throws IOException {
FileWriter fileWriter =new FileWriter("D:\\学习\\c.txt",true);//续写加上true
// fileWriter.write(97);
// fileWriter.flush();
// //刷新后流可以继续使用
// fileWriter.write(98);
// char[] chars ="我在学java".toCharArray();
// fileWriter.write(chars);
// fileWriter.write(chars,3,4);
// fileWriter.flush();
// fileWriter.write("我是程序员");
for (int i = 0; i < 10; i++) {
fileWriter.write("我在学习"+i+"\r\n");
}
fileWriter.flush();
fileWriter.close();
}
}