Java语法回顾之字符缓冲流Buffered
读了那么多年的书让我明白一个道理。人要稳重,不要想到啥就做啥。做一行越久即使你不会,几年之后慢慢的你也会了,加上一点努力你或许你能成为别人眼中的专家。
Buffered缓冲流简介
/*
* 我们开始自己定义数组,给出缓冲区大小,是为了提高效率。
* 那么,java在设计类的时候,它也考虑到了这一点,所以,就提供了一种高效的流。带缓冲区的流。
* BufferedWriter:写入数据
* BufferedReader:读取数据
*
* BufferedWriter:
* 构造方法:BufferedWriter(Writer out)
* 为什么传递的是Writer呢?
* 因为BufferedWriter这种流,被称为缓冲流,它只提供数据的缓冲功能。
* 真正的读写还得靠别人。所以,我们这里将使用FileWriter作为参数传递。
*
* 缓冲区只提供缓冲功能,没有真正的读写。
*
* 基本流:能直接进行读写的流对象。
* 高级流:站在基本流的基础上,提供一些特殊的功能。(处理流。)
*/
BufferedReader简单使用
/*
* 字符缓冲流读取数据
*/
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
// 创建字符缓冲流对象
BufferedReader br = new BufferedReader(new FileReader("CopyMP3.java"));
// 读取数据
// int ch = 0;
// while ((ch = br.read()) != -1) {
// System.out.print((char) ch);
// }
char[] chs = new char[1024];
int len = 0;
while ((len = br.read(chs)) != -1) {
System.out.print(new String(chs, 0, len));
}
// 释放资源
br.close();
}
}
BufferedWriter简单使用
public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
//读取数据流
BufferedReader br = new BufferedReader(new FileReader("CopyMP3.java"));
//写入数据流
BufferedWriter bw = new BufferedWriter(new FileWriter("myMP3.java"));
//读数据操作
char[] chs = new char[1024];
int len = 0;
if (br!=null) {
while((len = br.read(chs))!=-1){
//写入数据
bw.write(chs,0,len);
}
}
bw.close();
br.close();
}
}
BufferedReader按行读取数据
/*
* BufferedWriter:
* public void newLine():根据系统平台写入行分隔符
*
* BufferedReader:
* public String readLine():一次读取一行的数据。但是不包含换行符。
*/
public class BufferedStreamDemo {
public static void main(String[] args) throws IOException {
// 读取数据
BufferedReader br = new BufferedReader(new FileReader("CopyMP3.java"));
String line = null;
while((line=br.readLine())!=null){
System.out.println(line);
}
// System.out.println(br.readLine());
br.close();
}
}
用高效字节流复制文件
/*
* 用字符高效流复制文本文件。
* 左边:一次一个字符
* 右边:一次一个字符数组
*
* 数据源:
* FileOutputStreamDemo.java
* 目的地:
* Copy.java
*
* 作业:
* 1:把复制文本文件的操作抽取出一个功能。该功能实现文本文件的复制。
* 2:自学字节高效流,复制图片。
* BufferedInputStream
* BufferedOutputStream
*/
用高效字节流复制文件代码测试
public class CopyFile {
public static void main(String[] args) throws IOException {
//数据源
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("//Users//xwf//Desktop//123.png")));
//目的地
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("321.jpg")));
byte[] chs = new byte[1024];
int len = 0;
while((len = bis.read(chs))!=-1){
bos.write(chs, 0, len);
}
bos.close();
bis.close();
}
}
高效流和集合的结合使用
public class test {
/*
* 数据源:
* ArrayList
* 目的地:
* 文本文件
*/
public static void main(String[] args) throws IOException {
//封装数据源
ArrayList<String> list = new ArrayList<>();
list.add("hello");
list.add("java");
list.add("hello");
list.add("Android");
//封装目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("array.txt"));
for (String string : list) {
bw.write(string);
bw.newLine();
}
bw.close();
}
}
————————————————————————————————————————————————
public class test {
/*
* 数据源:
* 文本文件
* 目的地:
* ArrayList
*/
public static void main(String[] args) throws IOException {
//封装数据源
BufferedReader br = new BufferedReader(new FileReader("array.txt"));
//封装目的地
ArrayList<String> list = new ArrayList<>();
//readLine 判断条件
String Line = null;
while((Line = br.readLine())!=null){
//向集合中添加数据
list.add(Line);
}
for (String string : list) {
System.out.println(string);
}
}
}
键盘录入数据到文本文件中
public class jianpan {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// 数据源
Scanner scanner = new Scanner(System.in);
//目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("jianpan.txt"));
System.out.println("请输入文本内容");
while (true) {
String nextLine = scanner.nextLine();
//键盘录入,终止判断
if ("exit".equals(nextLine)) {
break;
}
//读取数据
bw.write(nextLine);
bw.newLine();
bw.flush();
}
bw.close();
scanner.close();
}
}
对文件进行重命名
/*
* 如果对文件进行改名
*/
public class ChangeNameDemo {
public static void main(String[] args) {
File file = new File("a.txt");
// public boolean renameTo(File dest):重新命名
File dest = new File("aa.txt");
//需要2个文件对象
System.out.println(file.renameTo(dest));
}
}
复制文件,并改变文件名称
/**
* 复制love目录下.jpg的图片到桌面copylove下,并改后缀名为.png
*
* 思路:
* 1.封装数据源和目的地
* 2.遍历数据源目录,并判断是否有.jpg文件
* 3.获取文件名称,变改变原文件名称。
* 4.复制文件(读写文件,并使用新的文件名称)
*/
复制文件,并改变文件名称代码测试
public static void main(String[] args) throws IOException {
//封装数据源
File srcFile = new File("//Users//xwf//Pictures//love");
//封装目的地
File destFile = new File("//Users//xwf//Desktop//CopyLove");
//遍历源目录
File[] listFiles = srcFile.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return new File(dir, name).isFile() && name.endsWith(".jpg");
}
});
//判断目录是否存在,不存在就创建
if (!destFile.exists()) {
destFile.mkdirs();
System.out.println("目录创建成功"+destFile.getAbsolutePath());
}
for (File file : listFiles) {
//获取文件名称
String name = file.getName();
String newNameString = name.replace(".jpg", ".png");
System.out.println(newNameString);
FileInputStream fis = new FileInputStream(file);
//复制文件
FileOutputStream fos = new FileOutputStream(new File(destFile,newNameString));
byte[] bys = new byte[1024];
int len = 0;
while ((len=fis.read(bys))!=-1) {
fos.write(bys,0,len);
}
//关闭流
fos.close();
fis.close();
}
}
}