IO
File类
File类是java.io包的一个重要的类;
File类的对象可以是目录也可以是文件;
File类可以对目录或文件进行操作但不能对具体数据操作;
public class fileDemo1 {
public static void main(String[] args) {
/*
File类:一个File类的对象可以表示一个具体的文件或目录
*/
// File f1=new File("D:/JavaioDemo");
// System.out.println(f1.canRead());//文件是否只读
// System.out.println(f1.exists());//文件是否存在
// System.out.println(f1.canWrite());//文件能否写
// System.out.println(f1.isFile());//是否是目录或者文件
//
/* File file=new File("D:/FileDemo");
//System.out.prile.mkdirs());创建多级文件夹
file.delete();//删除一个文件夹时,文件夹中必须是空的
File[]files=file.listFiles();
//System.out.println(files);
for(File f:files){
if(f.isFile()){
f.delete();
}else{
f.listFiles();
}
}*/
}
}
输入和输出的概念
输入:往程序中输入;
输出:从程序往外写出;
输入流和输出流
按流向分;
输入流:InPutStream、Reader、ObjectInPutStream
输出流:OutPutStream、Writter、ObjectOutPutStream
字节流和字符流
按单位分;
字节流(byte):FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream
字符流:FileReader、FileWriter、BufferedReader、BufferedWriter
输入输出节点字节流
public class FileDemo2 {
public static void main(String[] args) throws IOException {
/*
FileInputStream inputStream=new FileInputStream("D:/demo1.txt");
FileOutputStream outputStream=new FileOutputStream("D:/demo2.txt");
int b=0;
while((b=inputStream.read())!=-1){
outputStream.write(b);
}
inputStream.close();//
outputStream.close();
*/
FileInputStream inputStream=new FileInputStream("D:/demo1.txt");
FileOutputStream outputStream=new FileOutputStream("D:/demo2.txt");
byte[] bytes=new byte[10];
int size=0;
while((size=inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,size);
}
inputStream.close();
outputStream.close();
}
}
节点流和处理流
public class SteamDemo2 {
public static void main(String[] args) throws IOException {
// FileInputStream 直接封装数据,称为节点流(最基础去读数据的流)
FileInputStream inputStream=new FileInputStream("D:/demo1.txt");
//BufferedInputStream 封装的是一个节点流对象,可以直接提供缓冲功能,称为处理流/包装流 缓冲字节输入流 默认缓冲区大小是8192个字节,可以自定义缓冲区大小
BufferedInputStream bufferedInputStream=new BufferedInputStream(inputStream,20);
FileOutputStream outputStream=new FileOutputStream("D:/demo2.txt");
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream,20);
byte[]bytes=new byte[10];
int size=0;
while((size=bufferedInputStream.read(bytes))!=-1){
bufferedOutputStream.write(bytes,0,size);
}
bufferedInputStream.close();
bufferedOutputStream.close();
}
}
输入输出节点字符流
public class SteamDemo3 {
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
String message= scanner.next();
//数据输出字节流(包装流/处理流)
FileOutputStream fileOutputStream=new FileOutputStream("D:/message.txt");
//fileOutputStream.write(message.getBytes()); 需要自己将字符串转为byte数组输出,比较麻烦
DataOutputStream dataOutputStream=new DataOutputStream(fileOutputStream);
dataOutputStream.writeUTF(message);//直接可以将字符串写出(内部进行转换)
dataOutputStream.flush();
dataOutputStream.close();
FileInputStream fileInputStream = new FileInputStream("D:/message1.txt");
DataInputStream dataInputStream=new DataInputStream(fileInputStream);
String s=dataInputStream.readUTF();
System.out.println(s);
}
}
对象输入输出流
public class OBjectStream {
/*
对象输入流:把java中的对象输出在文件中, 从文件把对象输入到程序中
为什么要把对象输出到文件中?
new Strudent("张三 ,28");数据存储在对象中,对象是在内存中存储,一但程序运行结束,对象就会销毁
有时需要对象长久保存,就需要对象输出到文件中,长久保存,举例系统升级,关闭服务器时将对象保存起来,升级完毕,重新把数据还回来
把对象输出到文件的过程也称为对象的序列化
再把对象从文件输入到程序的过程称为对象的反序列化,反序列化时会生成一个新的对象,所以反序列化也是创建对象的一种方式
*/
public static void main(String[] args) throws IOException, ClassNotFoundException {
/* String s = new String("abc");
Date date = new Date();
//对象输出 对象的序列化
FileOutputStream fileOutputStream=new FileOutputStream("D:/temp.txt");
ObjectOutput output=new ObjectOutputStream(fileOutputStream);
output.writeObject(s);
output.writeObject(date);
output.flush();
output.close();*/
//对象德输入 反序列化
FileInputStream inputStream = new FileInputStream("D:/temp.txt");
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
String s = (String) objectInputStream.readObject();
Date date=(Date)objectInputStream.readObject();
System.out.println(s);
System.out.println(date);
objectInputStream.close();
}
}
字符流
public class Chardemo1 {
public static void main(String[] args) throws IOException {
/*
字符流只能读文本文件,会将独到的字节结合编码表转换为一个字符编码
*/
FileReader reader=new FileReader("D:/temp.txt");
FileWriter writer=new FileWriter("D:/demo1.txt");
char[]chars=new char[2];
int size=0;
while((size= reader.read(chars))!=-1){
System.out.println(size);
writer.write(chars,0,size);
}
reader.close();
writer.close();
}
}
public class Chardemo2 {
public static void main(String[] args) throws IOException {
FileReader reader=new FileReader("D:/demo1.txt");
FileWriter writer=new FileWriter("D:/temp.txt",true);
//保留原来的内容,在原内容上向后追加
BufferedReader bufferedReader=new BufferedReader(reader);
BufferedWriter bufferedWriter=new BufferedWriter(writer);
String line=null;
while((line= bufferedReader.readLine())!=null){
bufferedWriter.write(line);
System.out.println(line);
bufferedWriter.newLine();//换行符
}
bufferedReader.close();
bufferedWriter.flush();
bufferedWriter.close();
}
}