目录
1.IO流介绍
IO(Input/Output)是计算机输入/输出的接口。Java的核心库java.io提供了全方面的IO接口,包括:文件系统的操作,文件读写,标准设备输出等等
2.File文件的使用
常用构造方法:File("文件或者目录的路径");
public String getName() //获取文件名称
public String getParent() //返回上一级目录的路径
public File getParentFile()//返回上一级目录的文件对象
public String getAbsolutePath()//返回绝对路径
public boolean exists()//文件是否存在 存在返回true 不存在 返回false
Public File[] listFiles()//获取所有的子目录集合
public boolean isDirectory()//是否为目录
public boolean isFile()//是否为文件
public long length()//返回文件的大小 (单位:字节)
boolean delete()//删除文件 或者空文件夹
boolean mkdir()//创建文件夹
boolean createNewFile()//创建新文件
3.字节流
多用于读取图片或者声音
- .InputStream是定义了字节输入流的抽象类 读取文件中的数据
- .OutputStream 是定义了字节输出流的抽象类 往文件中写数据
static String path="file/tt.txt";
static String data="大家好,我是American!!!\r\n";
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
byteWrite(path,data);
byteRead("file/tt.txt");
//byteCopyFile("file1/1.jpg", "file1/3副本.jpg");
}
/**
* 字节流 往文件中写数据
* @param path2 文件相对路径
* @param data2 是要写入到文件的数据
* @throws IOException
*/
private static void byteWrite(String path2, String data2) throws IOException {
// TODO Auto-generated method stub
//第二个参数为 true 数据将会逐后添加 不会覆盖 false 覆盖原先的内容
OutputStream write=new FileOutputStream(path,true);
//2.将数据转换成字节数组
byte[] bs=data.getBytes();
//3.将字节流数组写入文件
write.write(bs);
//4.关闭资源
write.close();
}
/**
* 读取字节 每次读取1024个字节
* @param string
* @throws IOException
*/
private static void byteRead(String string) throws IOException {
// TODO Auto-generated method stub
String str="";
//1.创建读取文件的输入流对象
InputStream ins=new FileInputStream(path);
//一次性读 512/1024个字节 效率比较高
//将文件中读到的数据保存在字节数组中
byte[] bs=new byte[1024];
//每循环一次就是读一次 读不到数据 返回-1
//ins.read(bs):返回读到的真实的字节数
while(ins.read(bs)!=-1){
str=str+new String(bs);
}
System.out.println(str.trim());
}
/**
* 将1.jpg复制粘贴一份至相应目录下(1副本.jpg)
* @param string 源文件路径
* @param string2 粘贴的路径
* @throws IOException
*/
private static void byteCopyFile(String string, String string2) throws IOException {
// TODO Auto-generated method stub
//1,创建读取源文件的内容 的输入流对象 (inpit...)
InputStream ins=new FileInputStream(string);
//2.创建写入新文件的 输出流对象(output...)
OutputStream out=new FileOutputStream(string2,true);
//3.定义字节数组保存读取到的内容
byte[] bs=new byte[1024];
int temp=-1;
//4.循环读取文件中的内容 然后将读取到的内容写入新文件
while((temp=ins.read(bs))!=-1){
out.write(bs,0,temp);
}
//5.释放资源
out.close();
ins.close();
}
4.字符流
字节流提供处理任何类型输入/输出操作的足够功能,但不能直接操作Unicode字符,因而需要字符流。
字符流层次结构的顶层是Reader 和Writer 抽象类
- .Writer 是定义流式字符输出的抽象类
- Reader是定义Java的流式字符输入模式的抽象类
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class CharStreamTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
charWriter("file1/char.txt","我charles-123\r\n");
charReader("file1/char.txt");
charCopyFile("file1/char.txt","file1/char副本.txt");
}
/**
* 过字符 输出流 往指定文件中写数据
* @param string 文件路径
* @param string2 内容
* @throws IOException
*/
private static void charWriter(String string, String string2) throws IOException {
// TODO Auto-generated method stub
Writer out=new FileWriter(string, true);
//将数据转化成字符数组
char[] cs=string2.toCharArray();
//将数据写入指定的文件中
out.write(cs);
out.close();
}
private static void charReader(String string) throws IOException {
// TODO Auto-generated method stub
//1.创建字符输入流对象
String str="";
Reader rd=new FileReader(string);
char[] cs=new char[1024];
//2.读取文件中的数据
while(rd.read(cs)!=-1){
str=str+new String(cs);
}
//System.out.println(str.trim());
String[] strs=str.trim().split("\r\n");
System.out.println(strs[2]);
//3.释放资源
rd.close();
}
private static void charCopyFile(String string, String string2) throws Exception {
// TODO Auto-generated method stub
Reader rd=new FileReader(string);
Writer wt=new FileWriter(string2);
char[] cs=new char[1024];
int temp=-1;
while((temp=rd.read(cs))!=-1){
wt.write(cs,0,temp);
}
//释放资源
wt.close();
rd.close();
}
}
5.字符缓冲流
- BufferedReader 通过缓冲输入提高性能
- BufferedWriter通过缓冲输出提高性能
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class BufferedCharStreamTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
buffWriter("file1/buffer.txt", "字符串缓冲流好啊\r\n");
buffReader("file1/buffer.txt");
}
/**
* 1.字符缓冲流 写入数据
*
* @param string 地址
* @param string2 数据
* @throws IOException
*/
private static void buffWriter(String string, String string2) throws IOException {
// TODO Auto-generated method stub
// 1.创建字符输出流对象 writer
Writer writer = new FileWriter(string, true);
// 2.创建字符输出缓冲流对象
BufferedWriter bfw = new BufferedWriter(writer);
// 3.将数据写入缓冲区
bfw.write(string2);
bfw.flush();
bfw.close();
writer.close();
}
/**
*
* @param string 文件数据
* @throws Exception
*/
private static void buffReader(String string) throws Exception {
// TODO Auto-generated method stub
String str = " ";
Reader reader = new FileReader(string);
BufferedReader bufread = new BufferedReader(reader);
String temp = null;
while ((temp = bufread.readLine()) != null) {
str = str + temp + "\r\n";
}
System.out.println(str);
bufread.close();
reader.close();
}
}
6.转换流
转换流是指将字节流与字符流之间的转换。转换流的出现方便了对文件的读写,她在字符流与字节流之间架起了一座桥梁,使原本毫无关联的两种流操作能够进行转化,提高了程 序的灵活性。字节流中的数据都是字符时,转成字符流操作更高效。
- InputStreamReader
- OutputStreamWriter
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
/**
* 字节流转换成字符流
* @author 51361
*
*/
public class ByteToCharStreamTest {
public static void main(String[] args) throws Exception {
write("file1/test.txt","你好 I am American\r\n");
reader("file1/test.txt");
}
private static void reader(String path) throws IOException {
// TODO Auto-generated method stub
String str="";
//1.创建字节输入流 读取文件的
InputStream ins=new FileInputStream(path);
//2.将字节输入流转换成 对应 字符输入流
InputStreamReader inrd=new InputStreamReader(ins);
char[] cs=new char[1024];
while(inrd.read(cs)!=-1){
str=str+new String(cs);
}
System.out.println(str.trim());
//3.释放资源
inrd.close();
ins.close();
}
private static void write(String path, String data) throws Exception {
// TODO Auto-generated method stub
//1.创建字节输出流 对象
OutputStream out=new FileOutputStream(path,true);
//2.将字节流转换成字符流
OutputStreamWriter osw=new OutputStreamWriter(out);
//3.将数据转换成字符数组
char[] cs=data.toCharArray();
//4.通过字符流将字符数组写入文件
osw.write(cs);
//5.释放资源
osw.close();
out.close();
}
}