数据操作
java.io.RandomAccessFile
随机文件读取,可以跳过字符,随机读取,但是,正是因为这个原因,是他只能存储定值的数据
java.io.InputStream
文件读取的抽象父类,available 计算文件的大小
java.io.OutputStream
文件写入·的抽象父类
java.io.FileInputStream;
文件读取
java.io.FileOutputStream;
文件写入
以上都是字节流的操作
一下是字符流的操作
Reader 抽象类
Writer 抽象类
import java.io.FileReader;
可以将数据读入char[] 然后直接输出
import java.io.FileWriter;
可以直接操作字符
对于字节流,和字符流的不同
字节流,直接操作文件,字符流要先转入缓存再操作文件
对于字节流,不关闭,文件直接就可以写在文件上
但是,对于,字符流,如果不关闭,或者不刷新,数据不会更新在文件上,
所欲,必须关闭数据源
转换流
import java.io.InputStreamReader;、
将数据有字节转换温字符 (byte - > char)
import java.io.OutputStreamWriter;
将数据有字符转换为字节 (char - > byte)
OutputStream FileoutputStream | FileoutputStream FileWiter
字符 《--》 字节 FileWiter 和 FileReader 并不是 Writer Reader 的子类 而是而是转换流的子类
inoutStream FileinputStream | FileinputStream Filereader
Writer
Input
内存操作流
import java.io.ByteArrayInputStream;
写入数据
import java.io.ByteArrayOutputStream;
输出数据
对于内存操作流数据,数据被分装,其他对于内存操作内数据不可获取(以前我还以为可以同通过FileWriter 直接把内存里面的数据直接flush 到文件,但是数据是分装的 不可访问)
该有对于这个数据的输入和输出 有点特别 不好记
管道流
PipedInputStream;
PrintStream
输入管道
PipedOutputStream;
输出管道
可以通过输出管道的connect 来连接输入管道 这可能是最原始的数据通信(自己查查API)
打印流
PrintWriter 字符
PrintStream 字节流
最方便的输出数据
但是必须关闭数据
Scanner
最方便的数据输入
对于数据的读取
还可以通过重定向
String path="C:\\Users\\Echo\\Desktop\\echoTest.txt";
File file =new File(path);
System.setIn(new FileInputStream(file));
Scanner in= new Scanner(System.in);
System.out.println(in.nextLine());
---------
String path="C:\\Users\\Echo\\Desktop\\echoTest.txt";
File file =new File(path);
Scanner in= new Scanner(file);
System.out.println(in.nextLine());
其实好像都差不多
BufferedReader
从缓冲数据读取
BufferedReader buf =new BufferedReader(new InputStreamReader(System.in));
按照一定数据读取
DataOutputStream
DataInputStream、
合并流数据
SequenceInputStream
数据压缩流
ZipOutputStream
eg:
File file =new File("C:\\Users\\Echo\\Desktop\\one.txt");
File zipfile =new File("C:\\Users\\Echo\\Desktop\\onezip.zip");
InputStream input =new FileInputStream(file);
ZipOutputStream ou =new ZipOutputStream(new FileOutputStream(zipfile));
ou.putNextEntry(new ZipEntry(file.getName())); //加载实体
ou.setComment("echozip"); //设置注释
byte [] temp = new byte[input.available()];
input.read(temp);
ou.write(temp); //对实体的内容的写入
input.close();
ou.close();
eg:
String info="F:\\echo";
File files = new File(info);
File file[] =files.listFiles();
File zfile =new File(info+".zip");
InputStream input=null;
ZipOutputStream ou =new ZipOutputStream(new FileOutputStream(zfile));
for(File f:file)
{
input=new FileInputStream(f);
ou.putNextEntry(new ZipEntry(f.getName())); //加载实体
ou.setComment("echozip"); //设置注释
byte [] temp = new byte[input.available()];
input.read(temp);
ou.write(temp); //对实体的内容的写入
}
input.close();
ou.close();
解压文件
ZipFile
eg:
String info="C:\\Users\\Echo\\Desktop\\onezip.zip";
File outFile =new File("C:\\Users\\Echo\\Desktop\\onezip.txt");
ZipFile zip =new ZipFile(info);
ZipEntry entry =zip.getEntry("two.txt");
InputStream input =zip.getInputStream(entry);
OutputStream out= new FileOutputStream(outFile);
byte [] temp =new byte[input.available()];
input.read(temp);
out.write(temp);
获取Entry
eg:
String info="F:\\echo.zip";
ZipInputStream zip=new ZipInputStream(new FileInputStream(info));
ZipEntry entry =null;
while((entry=zip.getNextEntry())!=null)
System.out.println(entry.getName());
配合使用ZipFile
回退流
PushbackInputStream