File流:
对象即可表示文件,也可表示目录,在程序中一个File对象可以代表一个目录或文件,
利用File类可以对文件或者目录进行基本操作。
语法:
File <对象名>=new File("E:/ 地址值");
基本的方法:
f**ile.isFile(); 判断是否为一个文件
file.isDirectory 判断是否为目录
file.exists 判断文件或者目录是否存在**
输出流、输入流
输入输出流是相对计算机内存来说的,如果数据输入到内存,则称为输入流,
如果从内存中输出则称为输出流!
其中输入/输出流 又分为字节流和字符流两种形式:
字节流:是8位通用字节流,单位是字节,字节流的基类是InputStream类和Reader类,它们是抽象类。
字符流:16位Unicode字符流,单位是Unicode字符,最适合用来处理字符串和文本,基类是:
Reader类和Writer类。
{字节输入流InputStream基类
{字节流-->
{字节输出流OutputStream基类
按照处理数据单元划分— |
{字符输入流Reader基类
{字符流-->
{字符输出流Writer基类
输入流:
**InputStream类常用方法:
int read() 读取一个字节数据
int read(byte) 将数据读取到字节数组中
int read(byte[ ]b,int off,int len) 从输入流中读取最多len长度的字节,保存到字节数组 b中,保存的位置从off开始。
void close(); 关闭输入流**
常用子类:FileInputStream,用于从文件中读取数据
输出流
OutputStream类常用方法
**1. void write(int c) 读取一个字节数据
2. void write(byte[ ] buf ) 写入数组buf的所有字节
3. void write(byte[ ]b,int off,int len) 将字节数组中off位置开始,长度为len的字节数据输出到输出流中。
4. void close() 关闭输出流
常用子类:FileOutputStream,用于想文件写数据**
Reader类常用方法
**1. int read() 从输入流中读取单个字符,返回多读取的字符数据
2. int read(byte[ ]c) 从输入流中读取c.length的字符,保存到字符数组c中,返回实际读取的 字符数
- read(char[ ]c,int off,int len ) 从输入流中读取最多len的长度字符,保存到字符数组c中,保存的位
置从off位置开始,返回实际读取的字符长度 - void close() 关闭流
常用子类:BufferedReader,结束Reader对象作为参数,并对其添加字符缓冲器**
writer类常用方法
**1. write(String str) 将字符串里包含的字符输出到指定的输出流中
2. write(String str,int off,int len) 将str字符串里从off位置开始长度为len的字符输出到输出流中
3. void close() 关闭输出流
4. void flush 刷新输出流**
## 使用字节流读写文本文件 ##
1.使用字节流FileInputStream读文本文件:
FileInputStream,称文件输入流,作用是将文件中的数据输入到内部存储器(简称内存)中。
它是字节输入流InputStream抽象类的一个子类,可以利用它来读取文本文件中的数据。
使用步骤:
- 引入相关类
- 构造一个文件输入流对象
InputStream 对象=new FileInputStream("text.txt");
- 利用文件输入流类的方法读取文本文件的数据
对象.available(); //可读取的字节数
对象.read() //读取文本的数据
4.关闭文件输入流对象:
对象.close;()
package 字节流;
/*
* 向一个新的文本文件中 写入旧的文件信息 (新:adcd) (旧:写入之后的:abcd)
* 也可以是复制,把0.png 复制到sss.png
*
* */
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Test {
public static void main(String[] args) throws Exception {
//实例化对象 指定路径
File file=new File("E:/images/0.png");
File file1=new File("E:/im/sss.png");
/*//实例化对象 指定路径
File file=new File("E:/images/0.txt");
File file1=new File("E:/im/sss.txt");
*/
//将对象路径读取
FileInputStream fip=new FileInputStream(file);
//将读取到的字节 写入
FileOutputStream fop=new FileOutputStream(file1);
//定义数组 将信息放入数组中
byte [] b=new byte[(int) file.length()];
//读取数组里面的字节
fip.read(b);
//将读取好的字节写入
fop.write(b);
//获取某个文件夹的名字
String ii=file.getName();
System.out.println(ii);
//关闭流
fip.close();
fop.close();
System.out.println("写入成功");
}
}
FileOutputStream:
使用字节流用于向文件写入数据 字节流
如果要读取数据,要先构造要写入哪一个文件的位置
FileWriter:字符流 后面可以用缓冲区,BufferedWriter
使用字符流BufferedReader 和FileReader 读取文本文件
**FileWriter <对象名333>=new FileWriter<"E:/地址">;**
BufferedWriter语法:
BufferedWriter <对象名>=new BufferedWriter<对象名333>;
可以用BufferedWriter的<对象名>,直接调用方法,不用通过数组,更加方便
注意:使用BufferedWriter的 <对象名>.flush(); 清空
<对象名>.close(); 关闭
二进制:
DataInputStream 可以进行读、写文件
**使用字节读取二进制文件:
需要和FileInputStream 配合使用**
ex:
FileInputStream fis=new FileInputStream("E:/ 地址");
//使用二进制:
DataInputStream dis=new DataInputStream(fis)
;
调用方法,使用二进制的对象进行调用
dis.方法();
使用字节写入二进制文件。和读取一样。
## 二进制读写文件 ##
package 字节流;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class DataErJinZhi {
public static void main(String[] args) throws Exception {
//实例化对象路径
File file=new File("E:/images/二进制.txt");
File file1=new File("E:/im/写入后的二进制.txt");
//实例化输入流,将要读取的路径放入对象中
FileInputStream fip=new FileInputStream(file);
//将要读取的对象 放入二进制中
DataInputStream dis=new DataInputStream(fip);
//输出流
FileOutputStream fop=new FileOutputStream(file1);
DataOutputStream dos=new DataOutputStream(fop);
dos.writeDouble(12.3);
double i=dis.readDouble();
System.out.println(i);
dis.close();
dos.close();
}
}
## Buffered读取输入/输入流 ##
package 字符流;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Buffered {
public static void main(String[] args) {
//创建流对象
File file=new File("E:/images/字符.txt");
File file1=new File("新的字符.txt");
//打开输入输出流
try {
FileReader fr=new FileReader(file);
BufferedReader br=new BufferedReader(fr);
//读取文本里面所有的信息
String str=br.readLine();
while(str!=null){
System.out.println(str);
str=br.readLine();
}
/*//打开输出流,写文件
FileWriter fw=new FileWriter(file1);
BufferedWriter bw=new BufferedWriter(fw);
bw.write("你好");*/
//两个都可以 这个只是读取,写入,控制台不能显示
FileInputStream fis=new FileInputStream(file);
FileOutputStream fos=new FileOutputStream(file1);
byte [] b=new byte[(int) file.length()];
fis.read(b);
fos.write(b);
//关闭资源
// bw.close();
// fw.close();
br.close();
fr.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}