
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~
IO流:
使用步骤:
① 创建字节输出流对象
②写数据
void write(int b):一次写一个字节数据void write(byte[] b):一次写一个字节数组的数据void write(byte[] b,int off,int len):一次写一个数组的部分数据(参数:数组、起始索引、个数)③释放资源
初识案例:
public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
//获取输出流对象
FileOutputStream fos = new FileOutputStream("D:\\JavaData\\myIO\\a.txt");
//写操作
fos.write(97);
//关闭资源
fos.close();
}
}
换行符:
\r\n\n\r续写:
当写出的文件存在时,一般情况会对内容进行覆盖,若想续写,需要在创建文件输出流对象时设置参数。
//参数一:路径
//参数二:是否续写:true续写 false:覆盖
FileOutputStream fos = new FileOutputStream("D:\\JavaData\\myIO\\a.txt",true);
使用步骤:
public int read():一次读取一个字节数据public int read(byte[] buffer):一次读取一个字节数组数据循环读取:
示例:
public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
//创建文件输入流对象
FileInputStream fis = new FileInputStream("D:\\JavaData\\myIO\\a.txt");
//循环读取(一次读取一个字节)
int b;
while((b = fis.read()) != -1){
System.out.print((char)b);
}
//释放资源
fis.close();
}
}
Java中的编码和解码方式:
public byte[] getBytes():使用默认方式编码public byte[] getBytes(String charsetName):使用指定的方式进行编码String(byte[] bytes):只用默认方式进行解码String(byte[] bytes,String charsetName):使用指定的方式进行解码字符流:
特点使用步骤:
public FileReader(File file):创建字符输入流关联本地文件publlic FileReader(String pathname):创建字符输入流关联本地文件public int read():读取数据,都到末尾返回 -1public int read(char[] buffer):一次读取数组长度的数据,读取到末尾返回 -1public int close():释放/关闭资源原理使用
public FileWriter(File file):创建字符输出流关联本地文件public FileWriter(String pathname):创建字符输出流关联本地文件public FileWriter(File file,boolean append):续写方式,创建字符输出流关联本地文件public FileWriter(String pathname,boolean append):续写方式,创建字符输出流关联本地文件void write(int c):写出一个字符(输出整数对应ASCII码)void write(String s):写出一个字符串void write(String str,int off,int len)写出一个字符串,指定起始索引和输出长度void write(char[] cbuf):写出一个字符数组的数据void write(char[] cbuf,int off,int len):写出一个字符数组的数据,指定起始索引和输出长度缓冲流:
字节缓冲流:
public BufferedInputStream(InputStream is):把基本流包装成高级流,提高读取数据的效率public BufferedOutoutStream(OutputStream os):把基本流包装成高级流,提高写出数据的效率字符缓冲流:
public BufferedReader(Reader r):把基本流包装成高级流,提高读取数据的效率(字符缓冲输入流对象)public BufferedWriter(Writer r):把基本流包装成高级流,提高写出数据的效率(字符缓冲输出流对象)public String readLine():读取一行数据,读至末尾没有数据就返回nullpublic void newLine():换行操作,可跨平台转换流:
public InputStreamReader(InputStream in):将字节输入流转换为字符输入流。public OutputStreamWriter(OutputStream out):将字符输出流转换为字节输出流。序列化流(对象操作输出流):
作用:可以将Java对象写入到本地文件中。
使用:
public ObjectOutputStream(OutputStream out):把基本字节输出流,包装成序列化流(获取序列化流对象)public final void writeObject(Object obj):把对象序列化(写出)到本地文件中去NotSerializableException,需要让JavaBean类实现Serializable接口,表示此类对象是可序列化的。反序列化流(对象操作输入流):
作用:可以把序列化到本地文件中的对象,读取到程序中来。
使用:
public ObjectInputStream(InputStream in):把基本字节输入流,包装成反序列化流(获取反序列化流对象)public Object readObject():把序列化到本地文件中的对象,读取到程序中来需要让JavaBean类实现Serializable接口,表示此类对象是可序列化的。同时防止Java版本号的改变,使得序列化版本号不一致进而反序列化失败的问题,我们应该为JavaBean中手动设置一个序列化版本号:
private static final long serialVersionUID = -6357601841666449654L;
打印流:
打印流
PrintStreamPrintWriter字节打印流-PrintStream
构造方法(获取字节打印流对象):
public PrintStream(OutputStream/File/String):关联字节输出流/文件/文件路径
public PrintStream(String fileName,Charset charset):指定字符编码
public PrintStream(OutputStream out,boolean autoFlush):设置自动刷新
public PrintStream(OutputStream put,boolean aytoFlush,Charset charset):指定字符编码并自动刷新
成员方法:
public void write(int b):将指定字节写出
public void println(Xxx xxx):特有方法:打印任意数据,自动刷新,自动换行
public void print(Xxx xxx):特有方法:打印任意数据,不换行
public void printf(String format,Object... args):特有方法:带有占位符地打印语句,不换行
字符打印流-PrintWriter
特点:
解压缩流:
**解压本质:**把压缩包中地每一个ZipEntry对象按照层级拷贝到本地的另一个文件夹中去。
使用:
public ZipInputStream(InputStream in):构造方法,将普通字节输入流包装成解压缩流。ZipInputStream.getNextEntry():获取压缩包中的entry对象,读到末尾返回null案例:
public class ZipStreamDemo {
public static void main(String[] args) throws IOException {
//解压缩流 示例
//File对象,表示需要解压缩的文件
File src = new File("D:\\JavaData\\myIO\\aa.zip");
//File对象,表示解压后的路径
File dest = new File("D:\\JavaData\\myIO");
unZip(src,dest);//解压缩
}
//创建一个方法,用于解压
public static void unZip(File src,File dest) throws IOException {
//创建解压缩流对象
ZipInputStream zip = new ZipInputStream(new FileInputStream(src));
//读取解压后的每一个entry对象
ZipEntry entry;
while((entry = zip.getNextEntry()) != null){
//如果是文件夹,解压目录下创建新的文件夹
if(entry.isDirectory()){
File file = new File(dest,entry.toString());
file.mkdirs();
}else{
//如果是文件,输出到指定目录
FileOutputStream fos = new FileOutputStream(new File(dest, entry.toString())); //输出流
int i;
while((i = zip.read()) != -1){
//写到目的地
fos.write(i);
}
fos.close(); //关闭输出流
zip.closeEntry(); //关闭当前entry
}
}
zip.close();
}
}
压缩流:
ZipOutputStream
压缩单个文件: