Java读写文件的IO流分两大类,字节流和字符流,基类分别是
字符:Reader和Writer
字节:InputStream和OutPutStream
BufferedInputStream是带缓冲区的输入流,默认缓冲区大小是8M,能够减少访问磁盘的次数,提高文件读取性能;
BufferedOutputStream是带缓冲区的输出流,能够提高文件的写入效率。
1.java的文件操作
1.1目录或文件的创建
package com.文件流.s1;
import java.io.File;//java.io.File类用于表示文件(目录)
import java.io.IOException;
/**
* 文件操作:文件目录创建,文件创建
*/
public class Demo1 {
public static void main(String[] args) throws IOException {
//文件对象 mac,linux中注意权限问题
File file = new File("D://java创建的目录");
boolean b = file.mkdir(); // 创建虚拟目录
if (b) {
System.out.println("目录创建成功");
//文件对象 mac,linux中注意权限问题
file = new File("D://java创建的目录//java创建的文件.txt");
boolean b2 = file.createNewFile(); // 创建文件
if (b2) {
System.out.println("文件创建成功!");
} else {
System.out.println("文件创建失败!");
}
} else {
System.out.println("目录创建失败");
}
}
}
1.2文件或目录删除操作
package com.文件流.s1;
import java.io.File;
import java.io.IOException;
/**
* 文件操作:文件删除和文件目录删除
*/
public class Demo2 {
public static void main(String[] args) throws IOException {
File file=new File("D://java创建的目录//java创建的文件.txt");
if(file.exists()){ // 判断文件是否存在
boolean b=file.delete(); // 删除文件
if(b){
System.out.println("文件删除成功");
}else{
System.out.println("文件删除失败");
}
file=new File("D://java创建的目录");
if(file.exists()){
boolean b2=file.delete(); // 删除目录
if(b2){
System.out.println("目录删除成功");
}else{
System.out.println("目录删除失败");
}
}
}
}
}
1.3遍历文件(查找文件)
package com.文件流.s1;
import java.io.File;
import java.io.IOException;
/**
* 目录的遍历
*/
public class Demo3 {
public static void main(String[] args) {
String path = "D:\\";//要遍历的路径
File file = new File(path);//获取其file对象
File[] fs = file.listFiles();//遍历path下的文件和目录,放在File数组中
for (File f : fs) { //遍历File[]数组
if (!f.isDirectory())//若非目录(即文件),则打印
System.out.println(f);
}
}
}
1.4文件的遍历
package com.文件流.s1;
import java.io.File;
import java.io.IOException;
/**
* 文件递归
*/
public class Demo4 {
public static void listFile(File file){
if(file!=null){
if(file.isDirectory()){ // 是目录情况
System.out.println(file); // 打印目录
File files[]=file.listFiles(); // 遍历目录
if(files!=null){
for(int i=0;i<files.length;i++){
listFile(files[i]); // 递归调用自身
}
}
}else{ // 是文件情况
System.out.println(file); // 是文件 直接打印文件的路径
}
}
}
public static void main(String[] args) throws IOException {
File file=new File("D://");
listFile(file);
}
}
2.字节流
2.1输入流
第一种:
package com.文件流.s2;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* 字节流:输入操作
*/
public class Demo01 {
/**
* 字节
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//创建文件对象
InputStream inputStream=new FileInputStream(file);//创建字节输出流对象
byte b[]=new byte[1024];//创建字节数组对象
int len=inputStream.read(b);//读取字节数组长度
inputStream.close();//关闭字节流
System.out.println("读取的内容是:"+new String(b,0,len));
}
}
第二种:
package com.文件流.s2;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* 字节流:输入操作
*/
public class Demo2 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//创建文件对象
InputStream inputStream=new FileInputStream(file);//创建字节输出流对象
int fileLength=(int) file.length();//文件的长度
byte b[]=new byte[fileLength];//创建字节文件对象
inputStream.read(b);//获取字节流长度
inputStream.close();//关闭字节流
System.out.println("读取的内容是:"+new String(b));
}
}
第三种:
package com.文件流.s2;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* 字节流:输入操作
*/
public class Demo3 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//创建文件对象
InputStream inputStream=new FileInputStream(file);//创建字节输出流对象
int fileLength=(int) file.length();//获取字节长度
byte b[]=new byte[fileLength];//创建字节数组对象
int len=0;
int temp=0;//字节流的长度
while((temp=inputStream.read())!=-1){//如果字节流的长度不等于-1
b[len++]=(byte) temp;
}
inputStream.close();
System.out.println("读取的内容是:"+new String(b));
}
}
2.2输出流
第一种:
package com.文件流.s2;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
/**
* 字节流:输出操作
*/
public class Demo4 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//创建文件对象
OutputStream out=new FileOutputStream(file);//创建文件输出流对象
String str="你好,我好,大家好 ,爱生活,爱拉芳";//字符串
byte b[]=str.getBytes();//字符串转换为字节数组
out.write(b);//写入
out.close();//关闭
}
}
第二种:
package com.文件流.s2;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
/**
* 字节流:输出操作
*/
public class Demo5 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//创建文件对象
OutputStream out=new FileOutputStream(file,true);//创建字符输出对象
String str="你好,我好,大家好 ,爱生活,爱拉芳322好啊";//字符串
byte b[]=str.getBytes();//字符串转换为字节数组
out.write(b);
out.close();
}
}
3.缓冲区
package com.文件流.s3;
import java.io.*;
/**
* 缓冲方式
*/
public class Demo01 {
/**
* 缓冲方式
* @throws Exception
*/
public static void bufferStream()throws Exception{
BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("D:\\a.txt"));//创建缓冲区输入流
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("D:\\复制a.txt"));//创建缓冲区输出流
int b=0;
long startTime=System.currentTimeMillis();//获取当前的时间
while((b=bufferedInputStream.read())!=-1){//缓冲区字节流还有
bufferedOutputStream.write(b);//写入缓冲区
}
bufferedInputStream.close();//关闭缓冲区输入流
bufferedOutputStream.close();//关闭缓冲区输出流
long endTime=System.currentTimeMillis();//获取当前的系统时间
System.out.println("缓冲方式话费的时间:"+(endTime-startTime));
}
/**
* 非缓冲方式
* @throws Exception
*/
public static void stream()throws Exception{
InputStream inputStream=new FileInputStream("D:\\a.txt");//创建输入流
OutputStream outputStream=new FileOutputStream("D:\\复制a.txt");//创建输出流
int b=0;
long startTime=System.currentTimeMillis();//获取当前系统时间
while((b=inputStream.read())!=-1){//字节流的长度还有
outputStream.write(b);//写入
}
inputStream.close();//关闭输入流
outputStream.close();//关闭输出流
long endTime=System.currentTimeMillis();//获取当前时间
System.out.println("非缓冲方式话费的时间:"+(endTime-startTime));
}
public static void main(String[] args) throws Exception {
stream();
// bufferStream();
}
}
4.字符流
4.1字符流读
第一种
package com.文件流.s4;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
/**
* 字符流:读
*/
public class Demo01 {
/**
* 字符
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
File file=new File("D://a.txt");//创建文件
Reader reader=new FileReader(file);//创建读字符对象
char c[]=new char[1024];//创建字符对象
int len=reader.read(c);//读取文件字符长度
reader.close();//关闭字符流对象
System.out.println("读取的内容是:"+new String(new String(c,0,len)));
}
}
第二种
package com.文件流.s4;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
/**
* 字符流:输入流
*/
public class Demo2 {
public static void main(String[] args) throws Exception {
File file=new File("D://a.txt");//创建文件对象
Reader reader=new FileReader(file);//创建字符流对对象
char c[]=new char[1024];//创建字符流
int len=0;
int temp=0;
while((temp=reader.read())!=-1){//文件还在读
c[len++]=(char) temp;
}
reader.close();
System.out.println("读取的内容是:"+new String(new String(c,0,len)));
}
}
4.2字符流写
第一种
package com.文件流.s4;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
/**
* 字符流:输出流
*/
public class Demo3 {
public static void main(String[] args) throws Exception {
File file=new File("D://测试文件.txt");//创建文件对象
Writer out=new FileWriter(file);//创建字符流对象
out.write("爱我中华");//写入
out.close();//关闭
}
}
第二种
package com.文件流.s4;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class Demo4 {
public static void main(String[] args) throws Exception {
File file=new File("D://测试文件1.txt");//创建文件对象
Writer out=new FileWriter(file,true);//创建字符写入对象
out.write("爱我中华");
out.close();
}
}