文件就是保存数据的地方,比如大家经常使用的word文档,text文档,excel文档,可以是音频也可以是视频还可以是文件。
文件在程序中是以流的形式来操作的。
常见文件对象的相关的构造器和方法
相关方法
@Test
的使用:
package Pac;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.io.File;
import java.io.IOException;
/**
*
*/
public class FileCreate {
public static void main(String[] args) {
}
//方式1:new File(String path) // 根据路径构建一个File对象
@Test
public void create01(){
String filePath = "e:\\news1.txt";
File file = new File(filePath);
try{
file.createNewFile();
System.out.println("news1.txt文件创建成功~");
}catch (IOException e){
e.printStackTrace();
}
}
//方式2: new File(File parent, String child) // 根据父目录文件 + 子路径 构建
//e:\\new2.txt
@Test
public void create02(){
File parentFile = new File("e:\\");
String fileName = "news2.txt";
File file = new File(parentFile,fileName); //在这里里,仅仅是在内存里面有file
try{
file.createNewFile(); //执行了create才是真正将file写在磁盘里面
System.out.println("news2.txt文件创建成功~ ");
}catch(IOException e){
e.printStackTrace();
}
}
//方式3:new File(String parent, String child) // 根据父目录 + 子目录路径 构建
@Test
public void create03(){
String parentPath = "e:\\";
String filePath = "news3.txt";
File file = new File(parentPath, filePath);
try{
file.createNewFile();
System.out.println("news3.txt文件创建成功~");
}catch(IOException e){
e.printStackTrace();
}
}
}
package Pac;
import org.junit.jupiter.api.Test;
import java.io.File;
/**
*
*/
public class FileInformation {
public static void main(String[] args) {
}
//获取文件的信息
@Test
public void info(){
//先创建文件的对象
File file = new File("e:\\news1.txt");
//调用相应的方法,得到对应的信息
System.out.println("文件名字 = " + file.getName());
// 常用的文件的方法: getName、getAbsolutePath、getParent、length、exits、isFile、isDirectory
System.out.println("文件的绝对路径 = " + file.getAbsolutePath());
System.out.println("文件的父目录 = " + file.getParent());
System.out.println("文件的大小 = " + file.length());
System.out.println("文件是否存在" + file.exists());
System.out.println("是否是一个文件" + file.isFile());
System.out.println("是否是一个目录" + file.isDirectory());
}
}
"C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=52010:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-launcher\1.7.0\junit-platform-launcher-1.7.0.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit5-rt.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Mud;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\Administrator\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 Pac.FileInformation,info
文件名字 = news1.txt
文件的绝对路径 = e:\news1.txt
文件的父目录 = e:\
文件的大小 = 14
文件是否存在true
是否是一个文件true
是否是一个目录false
Process finished with exit code 0
package Pac;
import org.junit.jupiter.api.Test;
import java.io.File;
public class Directory_ {
public static void main(String[] args) {
//
}
//判断E盘中 E:\\news1.txt是否存在,如果存在则删除
@Test
public void m1(){
String filePath = "d:\\news1.txt";
File file = new File(filePath);
if(file.exists()){
if(file.delete()){
System.out.println(filePath + "删除成功");
} else{
System.out.println(filePath + "删除失败");
}
}else{
System.out.println("该文件不存在......");
}
}
}
抽象基类 | 字符流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
InputStream
和 OutputStream
InputStream
抽象类是所有类字节输入流的超类
InputStream
抽象类的常用子类
FileInputStream
: 文件输入流BufferedInputStream
: 缓冲字节输入流ObjectInputStream
: 对象字节输入流OutputStream
抽象类的常用子类
FileOutputStream
: 文件输出流FileInputStream
package PacinputStream;
import org.junit.jupiter.api.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStream_ {
public static void main(String[] args) {
}
//单个字节的读取,运行效率比较低
@Test
public void readFile01() {
String filePath = "e:\\hello.txt";
int readData = 0;
//创建了FileInputStream对象,用于读取hello.txt文件
FileInputStream fileInputStraem = null;
try {
//创建了FileInputStream对象,用于读取hello.txt文件
fileInputStraem = new FileInputStream(filePath);
// 从该输入流读取最多b.length字节的数据到字节数组。 此方法将阻塞,直到某些输入可用。
// 如何返回-1,表示读取完毕
while((readData = fileInputStraem.read()) != -1){
System.out.print((char)readData);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//当文件读取完毕的时候,一定要关闭流,释放资源
try {
fileInputStraem.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
"C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=53612:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-launcher\1.7.0\junit-platform-launcher-1.7.0.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit5-rt.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Mud;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\Administrator\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 PacinputStream.FileInputStream_,readFile01
hello world,刘建æˆ
Process finished with exit code 0
package PacinputStream;
import org.junit.jupiter.api.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStream_ {
public static void main(String[] args) {
}
/**
* 单个字节的读取,效率比较低
* ->使用read(byte[] b)
*/
@Test
public void readFile01() {
String filePath = "e:\\hello.txt";
int readData = 0;
//创建了FileInputStream对象,用于读取hello.txt文件
FileInputStream fileInputStraem = null;
try {
//创建了FileInputStream对象,用于读取hello.txt文件
fileInputStraem = new FileInputStream(filePath);
// 从该输入流读取一个字节的数据。 如果没有输入可用,此方法将阻止。
// 如何返回-1,表示读取完毕
while((readData = fileInputStraem.read()) != -1){
System.out.print((char)readData);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//当文件读取完毕的时候,一定要关闭流,释放资源
try {
fileInputStraem.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//优化代码:
/**
* 使用read(byte[] b)读取文件
* @param b
*/
@Test
public void readFile02() {
String filePath = "e:\\hello.txt";
int readData = 0;
//定义一个字节数组
byte[] buf = new byte[8]; //一次性读取8个字节
int readLen = 0;
//创建了FileInputStream对象,用于读取hello.txt文件
FileInputStream fileInputStraem = null;
try {
//创建了FileInputStream对象,用于读取hello.txt文件
fileInputStraem = new FileInputStream(filePath);
// 从该输入流读取最多b.length字节的数据到字节数组。 此方法将阻塞,直到某些输入可用。
// 如何返回-1,表示读取完毕
while((readLen = fileInputStraem.read(buf)) != -1){ //实际读取到的值
System.out.print(new String(buf,0,readLen)); //显示
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//当文件读取完毕的时候,一定要关闭流,释放资源
try {
fileInputStraem.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
"C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=53812:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-launcher\1.7.0\junit-platform-launcher-1.7.0.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit5-rt.jar;D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Mud;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\Administrator\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 PacinputStream.FileInputStream_,readFile02
hello world
Process finished with exit code 0
FileOutputStream
package PacoutputStream;
import org.junit.jupiter.api.Test;
import java.io.*;
public class OutputStream_ {
/**
* 要求:请使用FileOutputStream在a.txt文件中写入“Hello,world”。 [如果文件不存在,会创建文件]
* (注意:前提是目录已经存在)
* @param args
*/
public static void main(String[] args) {
}
/**
* 演示使用FileOutputStream写入文件,将数据写到文件中,如果该文件不存在则创建该文件
*
*/
@Test
public void writeFile(){
//创建按我们的FileOutputStream对象
String filePath = "e:\\a.txt";
FileOutputStream fileOutputStream = null;
try {
//得到fileOutputStream对象
fileOutputStream = new FileOutputStream(filePath,true);
//写入一个字节
// fileOutputStream.write('H');
//1.这种方法是写入覆盖原来的内容
//写入字符串
String str = "hello,world!";
//str.getBytes()可以将字符串转成字符数组
fileOutputStream.write(str.getBytes());
/**从位于偏移量 off的指定字节数组写入 len字节到该文件输出流。
* public void write(byte[] b,
* int off,
* int len)
* throws IOException
*
* 从位于偏移量off的指定字节数组写入len字节到文件的输出流
*
*/
str = "hi,world,Martin!";
fileOutputStream.write(str.getBytes(),0,str.length());
//2.如果不希望覆盖原先的内容
/**
* public FileOutputStream(File file,
* boolean append)
* throws FileNotFoundException
*
* file-要写入的文件
* append-如果为True,则写入文件的末尾,而不是开头。追加文件,而非覆盖。
*/
fileOutputStream.write(str.getBytes(),0,str.length());
} catch (IOException e) {
e.printStackTrace();
} finally {
//将流关闭
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileInputStream 和 FileOutputStream
package PacoutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
public static void main(String[] args) {
//完成文件拷贝,将e://Koala.jpg 拷贝c:\\
//思路分析
//1. 创建的文件的输入流,将文件读入到程序
//2. 创建文件的输出流,将读取到的文件的数据写入到指定的位置
//在完成程序时,应该是读取部分数据就写入到指定的文件中,这里是使用的循环操作。
//而不是将读取全部数据,直接写入全部数据。
String srcFilePath = "e:\\Koala.jpg";
String destFilePath = "d:\\Koala.jpg";
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream(srcFilePath);
fileOutputStream = new FileOutputStream(destFilePath);
//定义一个字节数组,提高读取效率
byte[] buf = new byte[1024];
int readLen = 0;
while((readLen = fileInputStream.read(buf)) != -1){
//读取到后,就写入到文件,通过fileOutputStream
//即,是一边读一边写
fileOutputStream.write(buf,0,readLen);
}
System.out.println("拷贝ok~");
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭释放资源
try {
//如果输入流不等于空,则关闭输入流
if(fileInputStream != null){
fileInputStream.close();
}
//如果输出流不等于空,则关闭输出流
if(fileOutputStream != null){
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
"C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=54854:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\Pro\out\production\Mud;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\Administrator\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;C:\Users\Administrator\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar" PacoutputStream.FileCopy
拷贝ok~
Process finished with exit code 0
Reader
和 Writer
FileReader
: 字符流,按照字符来操作
FileReader
相关方法:
new FileReader(File/String)
read
: 每次读取单个字符,返回该字符,如果文件末尾返回-1
read(char[])
: 批量读取多个字符到数组,返回读取到的字符数,如果到文件末未返回-1
API
:
new String(char[])
: 将char[]
转换成String
new String(char[], off, len)
: 将char[]
的指定的部分转换为String
FileWriter:
字符流,按照字符来操作
FileWriter
相关方法:
new FileWriter(File/String)
: 覆盖模式,相当于流的指针在首端, 这里的覆盖模式是指,对于原来的文件。我们可以覆盖掉,如果在同一个try里面,则实际上是进行的追加的。try结束了之后,再重新覆盖的。new FileWriter(File/String, true)
: 追加模式,相当于流的指针在尾端write(int)
: 写入单个字符write(char[])
: 写入指定数组write(Char[], off, len)
: 写入指定数组的指定部分write(String)
: 写入整个字符串write(Strng, off, len)
: 写入字符串的指定的部分相关的API
:
String
类toCharArray
: 将String
转换为char[]
FileWriter使用后,必须要关闭(close)或者刷新(flash),否则写入不到指定的文件
FileReader
package PacReader;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
*
*/
public class FileReader_ {
public static void main(String[] args) {
}
/**
* 单个字符读取文件
*/
@Test
public void readFile01() {
String flaPath = "e:\\story.txt";
FileReader fileReader = null;
int data = ' ';
//1.先创建一个FileReader对象
try {
fileReader = new FileReader(flaPath);
//循环读取,使用read方法,单个字符读取
while((data=fileReader.read()) != -1){
System.out.print((char)data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(fileReader != null){
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 多个字符读取文件
*/
@Test
public void readFile02() {
String flaPath = "e:\\story.txt";
FileReader fileReader = null;
int readLen = 0;
char[] buf = new char[8];
//1.先创建一个FileReader对象
try {
fileReader = new FileReader(flaPath);
//循环读取,使用read(buf)方法,返回的是实际读取到的字符数
//如果返回-1,说明文件结束
while((readLen=fileReader.read(buf)) != -1){
System.out.print(new String(buf,0,readLen));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(fileReader != null){
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileWriter
FileReader
、FileWriter[源码]
BufferedReader
、BufferedWriter[源码]
BufferedReader
从这里可以看出,BufferedReader里面有一个Reader属性。个属性只要是Reader的子类都是可以的。
实现具体的BufferedReader代码
package PacReader01;
import java.io.BufferedReader;
import java.io.FileReader;
/**
* 演示BufferedReader的使用
*/
public class BufferedReader_ {
public static void main(String[] args) throws Exception{
String filePath = "E:\\a.java";
//创建BufferedReader对象,节点流对象为FileReader
BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
//读取
/**
* bufferedReader.readLine();表示按行读取;当返回为null时,表示读取完毕
*/
String line; //按行读取,效率高
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
//关闭流,仅仅需要关闭外层流就可以了。因为底层会去自动的关闭节点流
//FileReader
bufferedReader.close();
}
}
BufferedWriter
从这里可以看出,BufferedWriter里面有一个Reader属性。这个属性只要是Writer的子类都是可以的。
实现具体的BufferedWriter代码
package PacReader01;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* 演示BufferedWriter的使用
*/
public class BufferedWriter_ {
public static void main(String[] args) throws IOException {
String filePath = "e:\\\\ok.txt";
//创建一个BufferedWriter
//说明:
// 1. new FileWriter(filePath,true) 表示以追加的方式写入
// 2. new FileWriter(filePath) 表示以覆盖的方式写入
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath, true));
bufferedWriter.write("hello1,思格露教育");
//bufferedWriter插入一个和系统相关的换行符
bufferedWriter.newLine();
bufferedWriter.write("hello2,思格露教育");
//bufferedWriter插入一个和系统相关的换行符
bufferedWriter.newLine();
bufferedWriter.write("hello3,思格露教育");
//bufferedWriter插入一个和系统相关的换行符
bufferedWriter.newLine();
//关闭外层流即可,传入的new FileWriter(filePath) 会在底层关闭
bufferedWriter.close();
}
}