//完成文件拷贝
//1.创建文件的输入流,将文件读入的程序
//2.创建文件的输出流,将文件输出到另一个文件
//在完成程序时,应该时读取部分数据,就写入到指定文件,这里使用循环操作
完成文件拷贝的java实例
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @ProjectName: Study
* @FileName: FileCopy
* @author:HWJ
* @Data: 2023/5/19 16:49
*/
public class FileCopy {
public static void main(String[] args) {
//完成文件拷贝
//1.创建文件的输入流,将文件读入的程序
//2.创建文件的输出流,将文件输出到另一个文件
//在完成程序时,应该时读取部分数据,就写入到指定文件,这里使用循环操作
String secfilePath = "d:\\photo.jpg";
String destfilePath = "d:\\exercise\\photo.jpg";
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream(secfilePath);
fileOutputStream = new FileOutputStream(destfilePath);
byte[] buf = new byte[1024];
int readLen = 0;
//边读编写
while((readLen = fileInputStream.read(buf)) != -1){
fileOutputStream.write(buf, 0, readLen);
//一定要使用这个方法
//可能出现这个buf最后没读够的情况
}
System.out.println("copy成功");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileInputStream != null){
fileInputStream.close();
}
if (fileOutputStream != null){
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileReader 和 FileWriter 介绍
FileReader 和 FileWriter是字符流,即按照字符来操作io,按照字符操作的类不能操作二进制文件。
类图
FileReader相关方法:
(1)new FileReader(File/String)
(2)read:每次读取单个字符,返回该字符,如果到文件末尾,返回-1
(3)read(char[]) 批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1
相关API:
(1)new String(char[]) 将char[]转换成String
(2)new String(char[], off, len) 将char[]的指定部分转换成String off偏移量
package Homework01.IO_;
import org.junit.jupiter.api.Test;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* @ProjectName: Study
* @FileName: FileReader_
* @author:HWJ
* @Data: 2023/5/19 17:28
*/
public class FileReader_ {
public static void main(String[] args) {
}
@Test
public void readFile01(){
//1.创建一个FileReader对象
int data = 0;
String filePath = "d:\\exercise\\ex.txt";
try {
FileReader reader = new FileReader(filePath);
//循环读取 使用read
while((data = reader.read()) != -1){
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void readFile02(){
//1.创建一个FileReader对象
int readLen = 0;
char[] buf = new char[10];
String filePath = "d:\\exercise\\ex.txt";
try {
FileReader reader = new FileReader(filePath);
//循环读取 使用read(buf), 返回的是实际读到的字符数
while((readLen = reader.read(buf)) != -1){
//可能存在读取不够的情况,使用readLen保证输出有效长度的字符
System.out.print(new String(buf, 0, readLen));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileWriter相关方法:
(1)new FileWriter(File/String): 覆盖模式,相当于流的指针在首端;
(2)new FileWriter(File/String,true): 追加模式,相当于流的指针在尾端;
(3)write(int)写入单个字符
(4)write(char[])写入指定数组
(5)write(char[],off,len)写入指定数组的指定部分
(6)write(str)写入整个字符串
(7)write(str,off,len)写入指定字符串的指定部分
相关API:
String类: toCharArray:将String转换成char[]
注意:FileWriter使用后,在此之前数据还是在内存中,必须要关闭(close)或刷新(flush),否则写入不到指定的文件。
package Homework01.IO_;
import java.io.FileWriter;
import java.io.IOException;
/**
* @ProjectName: Study
* @FileName: FileWriter_
* @author:HWJ
* @Data: 2023/5/19 17:37
*/
public class FileWriter_ {
public static void main(String[] args) {
String filePath = "d:\\exercise\\ex05.txt";
FileWriter writer = null;
//创建FileWriter对象
try {
writer = new FileWriter(filePath);//默认是覆盖模式
//第一种方式 write(int)写入单个字符
writer.write('H');
//第二种方式 write(char[])写入指定数组
char[] chars = {'h','e','l','l','o'};
writer.write(chars);
//第三种方式 write(char[],off,len)写入指定数组的指定部分
writer.write("风雨之后,定见彩虹".toCharArray(), 0, 4);
//第四种方式 write(str)写入整个字符串
writer.write(",定见彩虹");
//第五种方式 write(str,off,len)写入指定字符串的指定部分
writer.write("哈哈顶峰相见", 2, 4);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//FileWriter使用后,在此之前数据还是在内存中,必须要关闭(close)或刷新(flush),否则写入不到指定的文件。
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}