目录
(1)FileinputStream&FileOutputStream:
(2)BufferedinputStream&BufferedOutputStream
(3)DataInputStream&DataOutputStream
(2)BufferedReader&BufferedWriter
一、File类:
1.概念
File类是java.io包中很重要的一个类;
File类的对象可以表示文件,还可以表示目录,在程序中一个File类对象可以代 表一个文件或目录;
File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件 大小等;
File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作。
2.相关操作
(1).File的相关方法:
import java.io.File;
import java.util.Date;
public class filedemo1 {
/*
一个file类的对象,可以表示计算机硬盘上一个具体的目录
通过file类的对象,来获取文件、目录的相关信息(例如时间,是否可写...)但是不能读取文件中的内容
*/
public static void main(String[] args) {
File f=new File("D:/jianmo/src/Angle.java");//表示D盘中的a文件夹
File f1=new File("D:/day13");
System.out.println(f1.exists());//判断是否存在此文件
System.out.println(f.getAbsoluteFile());//获取文件的绝对地址
System.out.println(f1.getAbsoluteFile());
System.out.println(f1.isFile());//判断是否为文件
System.out.println(f.getName());//返回文件名
System.out.println(f.getParent());//返回文件的上一级
System.out.println(f.canRead());//判断是否可读
System.out.println(f.lastModified());//返回1970到现在的时间
System.out.println(new Date(f.lastModified()));
System.out.println(new Date(f1.lastModified()));
}
}
(2).File文件的创建
import java.io.File;
import java.io.IOException;
public class filedemo2 {
public static void main(String[] args) throws IOException {
File f=new File("D/jj");
if(!f.exists()){
boolean x=f.createNewFile();//创建文件
System.out.println(x);
}
System.out.println(f.delete());
File f1=new File("D:/kk");
f1.mkdir();//只能创建单级目录
f1.mkdirs();//能创建多级目录
}
}
(3).用递归方法遍历且删除一个文件夹中的所有文件:
import java.io.File;
public class filedemo3 {
public static void main(String[] args) {
File f=new File("D:/lyk");
/*
String [] s=f.list();//获取到指定文件下一级所有文件或目录的名字
for(String str:s){
System.out.println(str);
}
*/
System.out.println(f.isHidden());//是否为隐藏文件
File [] files=f.listFiles();
for(File fi:files){
Delete(fi);
}
}
public static void Delete(File f){
if(f.isDirectory()){
File [] f1=f.listFiles();
for(File fi:f1){
Delete(fi);
}
}
else{
f.delete();
}
}
}
二、Stream:
1.字节流:
import java.io.*;
import java.util.Date;
public class ObjectStream {
/*
对象输入输出流:
有时候,需要将运行中的对象信息持久保存起来,因为对象在内存中,程序如果终止,对象信息就不在了
将对象信息输出到文件的过程,称为对象的序列化,使用ObjectOutputStream完成(处理流)
将对象信息从文件中输入到java程序的过程,称为对象反序列化,使用的ObjectInputStream
对象的反序列化,会在内存中重新创建新的对象保存数据,所以,也是java中创建对象的一种方式
*/
public static void main(String[] args) throws IOException, ClassNotFoundException {
/*String s=new String("asd");
Date date =new Date();
FileOutputStream out=new FileOutputStream("D:/jj.txt");
ObjectOutputStream oos=new ObjectOutputStream(out);
oos.writeObject(s);
oos.writeObject(date);
oos.flush();
oos.close();
*/
FileInputStream in=new FileInputStream("D:/jj.txt");
ObjectInputStream oin=new ObjectInputStream(in);
String s=(String)oin.readObject();
Date d1=(Date) oin.readObject();
System.out.println(s+"\n"+d1);
oin.close();
}
}
(1)FileinputStream&FileOutputStream:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Streamdemo1 {
//文件输入输出字节流
public static void main(String[] args) throws IOException {
//创建一个输入流对象
FileInputStream in=new FileInputStream("D:/jj.txt");
FileOutputStream out=new FileOutputStream("D:/jj1.txt");
System.out.println(in.read());//97 每read一次,返回一个字节编码
System.out.println(in.read());//98
System.out.println(in.read());//99
System.out.println(in.read());//100
System.out.println(in.read());//当文件内容读完后返回-1
/*
int read() 默认一次读一个字节,返回的是读到的字节编码,效率低;
int read(byte[] b) 默认一次读一个指定大小的byte数组个字节,返回的是数组中一次实际装入的字节个数;
*/
byte [] b=new byte[100];
int size=0;
int t=0;
while((size = in.read(b))!=-1){
t++;
out.write(b,0,size);
}
//此方法大大缩减了遍历次数
in.close();
out.close();
}
}
(2)BufferedinputStream&BufferedOutputStream
import java.io.*;
public class Streamdemo2 {
//带缓冲区的字节输入输出流
public static void main(String[] args) throws IOException {
//创建一个输入流对象
FileInputStream in=new FileInputStream("C:/yqr.png");//普通流,节点流直接包含文件(数据)
BufferedInputStream bin =new BufferedInputStream(in);//处理流-->带缓冲功能的流
FileOutputStream out=new FileOutputStream("C:/yqr1.png");
BufferedOutputStream bout=new BufferedOutputStream(out);
byte [] b=new byte[1024];
int size;
while((size=bin.read(b))!=-1){
bout.write(b,0,size);
}
bout.close();
bin.close();
bout.flush();
}
}
(3)DataInputStream&DataOutputStream
import java.io.*;
public class Streamdemo3 {
//数据输入输出字节流
public static void main(String[] args) throws IOException {
String s="尼玛";
FileOutputStream out=new FileOutputStream("D:/jj.txt");
// out.write(s.getBytes());
FileInputStream in=new FileInputStream("D:/jj1.txt");
//byte[] b=new byte[100];
//int size =in.read(b);
//String str=new String(b,0,size);
//这样会很麻烦
DataOutput dout=new DataOutputStream(out);
dout.writeUTF(s);//将字符串直接写出,但是底层转为字节数组
DataInput din=new DataInputStream(in);
String str1=din.readUTF();//将底层读到的字节数组转化为字符串
in.close();
out.close();
}
}
2.字符流
(1)FileReader&FileWriter
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class chardemo {
public static void main(String[] args) throws IOException {
FileReader reader=new FileReader("D:/jj.txt");
FileWriter writer=new FileWriter("D:/jj1.txt");
char [] ch=new char[100];
int size=0;
while((size= reader.read(ch))!=-1){
writer.write(ch,0,size);
}
reader.close();
writer.close();
}
}
(2)BufferedReader&BufferedWriter
带缓冲区;
import java.io.*;
public class chardemo2 {
public static void main(String[] args) throws IOException {
FileReader reader=new FileReader("D:/jj.txt");
BufferedReader br=new BufferedReader(reader);
FileWriter writer=new FileWriter("D:/jj1.txt");
BufferedWriter bw=new BufferedWriter(writer);
String str=null;//一次可以读入一行数据
while((str=br.readLine())!=null){
bw.write(str);//不换行插入字符串
bw.newLine();//插入一个换行符
}
br.close();
bw.flush();
bw.close();
}
}
(3)PrintWriter
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class chardemo3 {
public static void main(String[] args) throws FileNotFoundException {
/*
PrintWriter
单向的输出,
后面在javaEE(服务器开发)中,可以使用PrintWriter从后端程序向前端响应数据
*/
PrintWriter pw=new PrintWriter("D:/jj.txt");
}
}