1.OutputStreamWriter的使用
A:OutputStreamWriter的构造方法
OutputStreamWriter(OutputStream out):根据默认编码(GBK)把字节流的数据转换为字符流
OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
B: 方法概述
public void write(int c) 写一个字符
public void write(char[] cbuf) 写一个字符数组
public void write(char[] cbuf,int off,int len) 写一个字符数组的 一部分
public void write(String str) 写一个字符串
public void write(String str,int off,int len) 写一个字符串的一部分
2.InputStreamReader的使用
A:InputStreamReader的构造方法
InputStreamReader(InputStream is):用默认的编码(GBK)读取数据
InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据
B: 方法概述
public int read() 一次读取一个字符
public int read(char[] cbuf) 一次读取一个字符数组 如果没有读到 返回-1
案例演示:复制一个文件
InputStreamReader input = new InputStreamReader(new FileInputStream("D:\\Java4.docx"));
OutputStreamWriter output = new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java4.docx"));
int len=0;
char[] chars = new char[1024];
while ((len=input.read(chars))!=-1){
output.write(chars,0,len);
output.flush();
}
input.close();
output.close();
3.FileWriter和FileReader
转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,
所以,为了简化我们的书写,转换流提供了对应的子类。
FileWriter
FileReader
转换流 便捷类
OutputStreamWriter ------- FileWriter
InputStreamReader ------- FileReader
案例演示:需求:把ArrayList集合中的字符串数据存储到文本文件
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("b.txt"));
ArrayList<String> list = new ArrayList<>();
list.add("张飞");
list.add("赵云");
list.add("关羽");
list.add("马超");
list.add("黄忠");
//遍历集合,取出数据,写入文本文件
for (String s : list) {
// System.out.println(s);
out.write(s);
out.write("\r\n");
out.flush();
案例演示:复制一个文件夹,并将文件夹中JPG格式的文件改成png格式
File srcFolder = new File("D:\\demo");
//封装目标文件夹
File targetFolder = new File("c:\\demo");
if (!targetFolder.exists()) {
targetFolder.mkdirs();
}
copyFiles(srcFolder, targetFolder);
}
private static void copyFiles(File srcFolder, File targetFolder) throws IOException {
//进行文件的复制
//1.获取源文件下的所有文件
File[] files = srcFolder.listFiles();
for (File f : files) {
//一个个复制
copySingleFile(f, targetFolder);
}
}
private static void copySingleFile(File f, File targetFolder) throws IOException {
FileInputStream in = new FileInputStream(f);//D:\\test\\a.avi
FileOutputStream out = new FileOutputStream(targetFolder + "\\" + f.getName());
int len2 = 0;
byte[] bytes = new byte[1024 * 10];
while ((len2 = in.read(bytes)) != -1) {
out.write(bytes, 0, len2);
}
File file = new File("c:\\demo");
File[] files1 = file.listFiles();
for (File file1 : files1) {
if (file1.getName().endsWith(".jpg")) {
String abs = file1.getAbsolutePath();
String sub = abs.substring(0, abs.lastIndexOf("."));
File newfile = new File(sub + ".png");
file1.renameTo(newfile);
}
}
in.close();
out.close();
案例演示:复制多级文件夹
File srcFolder = new File("D:\\MyLogin");
//封装目标文件夹
File targetFolder = new File("C:\\MyLogin");
if (!targetFolder.exists()) {
targetFolder.mkdirs();
}
copyFiles1(srcFolder, targetFolder);
}
private static void copyFiles1(File srcFolder, File targetFolder) throws IOException {
//进行文件的复制
//1.获取源文件下的所有文件
File[] files = srcFolder.listFiles();
for (File f : files) {
if (f.isFile()) {
//一个个复制
copySingleFile(f, targetFolder);
} else {
copyDir(f,targetFolder);
}
}
}
private static void copyDir(File f,File targetFolder) throws IOException {
File file = new File(targetFolder+"\\"+f.getName());
file.mkdirs();
copyFiles1(f,file);
}
private static void copySingleFile(File f, File targetFolder) throws IOException {
FileInputStream in = new FileInputStream(f);//D:\\test\\a.avi
FileOutputStream out = new FileOutputStream(targetFolder + "\\" + f.getName());
int len2 = 0;
byte[] bytes = new byte[1024 * 10];
while ((len2 = in.read(bytes)) != -1) {
out.write(bytes, 0, len2);
}
in.close();
out.close();