IO输出输入流

IO流:

I是指Input(输入),O是指Output(输出)

流按照处理数据的单位,可以分为字节流和字符流;按照流向分为输入流和输出流

File类

File类代表一个特定的文件或者目录,并提供了若干方法对该文件或目录进行操作。

创建一个文件类对象;

public class Test{
	public static void main(String[] args) {
		
		File file=new File("D:\\logs");
		System.out.println(file.getPath());
		file=new File("D:\\logs\\sirius.log");
		System.out.println(file.getPath());
	}
}

方法

 		Path path=file.toPath();
 		//file对象对应路径创建的path对象##########
		System.out.println(path.getFileName());
		//file对象对应的路径最后一级文件或文件夹
		System.out.println(file.getPath());
		//file对象对应的路径
		System.out.println(file.getName());
		//file对象对应的路径最后一级文件或文件夹
		System.out.println(file.isDirectory());
		//file对象判断是否为目录#############
		System.out.println(file.isFile());
		//file对象判断是否为文件##############
		file=new File("D:\\a");
		file=new File("D:\\logs\\sirius.log");
		System.out.println(file.exists());
		//判断目录或文件是否存在#############
		file=new File("D:\\a.txt");
		System.out.println(file.createNewFile());
		//创建文件,不是目录
		file=new File("D:\\aa");
		System.out.println(file.mkdir());
		//创建目录,但是只能创建一级。
		file=new File("D:\\aa\\bb\\cc");
		System.out.println(file.mkdirs());
		//创建目录,创建多级。
		file =new File("D:\\a\\bb");
		System.out.println(file.delete());
		//######### 删除最后一级文件夹,文件夹(不区分文件或文件夹)必须为空,否则删除失败
		file =new File("D:\\a.txt");
		System.out.println(file.delete());
		//删除文件	
		file=new File("D:\\Program_Files\\WebStorm 2020.2.3");
		File[] listFiles = file.listFiles();
		//获取当前文件级别内的所有信息########
		for (File l : listFiles) {
			System.out.println(l.getPath());
			//获取file文件对应的路径
		}
		String[] list = file.list();
		//获取当前文件级别的文件名
		for (String string : list) {
			System.out.println(string);
		}

Files

	Path path=Paths.get("D:\\a");
	System.out.println(Files.exists(path));
	//判断path对应的路径是否存在
		
	path=Paths.get("D:\\说明.txt");
	System.out.println(Files.exists(path));
	//判断path对应的路径是否存在
	System.out.println(Files.createFile(path));
	//创建path对象对应路径的文件
		
	path=Paths.get("D:\\bb");
	System.out.println(Files.createDirectory(path));
	//创建目录,只能创建一级
		
	path=Paths.get("D:\\bb\\cc");
	System.out.println(Files.createDirectory(path));
	//创建目录,只能创建一级							  	System.out.println(Files.createDirectories(path));
	//创建目录,可以创建多级

拷贝文件:

InputStream抽象类是所有输入字节流类的直接或间接父类,FileInputStream是其重要子类:

FileInputStream常用构造方法:
FileInputStream(File file) :通过File对象创建FileInputStream对象。
FileInputStream(String name) :通过文件(非“目录”)路径创建FileInputStream对象。
FileInputStream常用方法:
int read():从输入流中读取单个字节的数据;如果已到达文件末尾,则返回 -1。
int read(byte[] b):从输入流中将最多b.length个字节的数据读入一个byte数组中,以整数形式返回存入数组中的实际字节个数;如果已到达文件末尾,则返回 -1。
void close():关闭此文件输入流并释放与此流有关的所有系统资源。

OutputStream抽象类是所有输出字节流类的直接或间接父类,FileOutputStream是其重要子类:

FileOutputStream常用构造方法:
FileOutputStream(File file) :通过File对象创建FileOutputStream对象。
FileOutputStream(String name) :通过文件(非“目录”)路径创建FileOutputStream对象。
FileOutputStream(File file, boolean append):通过File对象创建FileOutputStream对象;第二个参数如果为true ,则字节将被写入文件的末尾而不是开头。
FileOutputStream常用方法:
void write(int b):将指定的单个字节数据写入此文件输出流。
void write(byte[] b, int off, int len):将byte数组中从off开始的len个字节写入此文件输出流。
void flush():刷新字节输出流并强制写出缓冲内所有字节数据。
void close():关闭此文件输出流并释放与此流有关的所有系统资源。

1.path方法
Path inPath=Paths.get("D:\\logs\\sirius.log");
Path outPath=Paths.get("F:\\ppt\\sirius.log");
Files.copy(inPath, outPath);//拷贝文件
2.files方法
FileInputStream inputStream=new FileInputStream("D:\\logs\\sirius.log");
Path outPath=Paths.get("F:\\ppt\\rius.log");
Files.copy(inputStream, outPath);//拷贝文件
3.字节流
FileInputStream , FileOutputStream

单个输入输出

	try {
		FileInputStream inputStream=new FileInputStream("D:\\2.jpg");
		FileOutputStream outputStream=new FileOutputStream("F:\\2.jpg");
		int data;
		while((data=inputStream.read())!=-1) {
			outputStream.write(data);
		}
		inputStream.close();
		outputStream.close();
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}

多个输入输出

	try {
		FileInputStream inputStream=new FileInputStream("D:\\ruanjian\\eclipse-jee-2021-06-M2-win32-x86_64.zip");
		FileOutputStream outputStream=new FileOutputStream("F:\\eclipse-jee-2021-06-M2-win32-x86_64.zip");//
		byte[] car=new byte[1024];
		int length;
		while((length=inputStream.read(car))!=-1) {
			outputStream.write(car,0,length);
		}
		outputStream.flush();
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
4.字符流
FileReader,FileWriter(*字节编码)

单个输入输出

try {
			FileReader reader=new FileReader("D:\\1.txt");
			FileWriter writer=new FileWriter("F:\\1.txt");
			int data;
			while((data=reader.read())!=-1) {
				writer.write(data);
			}
			writer.flush();
			writer.close();
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

多个输入输出

try {
			FileReader reader=new FileReader("D:\\1.txt");
			FileWriter writer=new FileWriter("F:\\1.txt");
			char[] car=new char[1024];
			int length;
			while((length=reader.read(car))!=-1) {
				writer.write(car,0,length);
			}
			writer.flush();
			writer.close();
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
5.缓冲字符流
字节 BufferedInputStream , BufferedOutputStream

字符 BufferedReader , BufferedWriter

缓冲流是一种装饰器类,目的是让原字节流、字符流新增缓冲的功能以提高读取或写入。

try {
		BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(""));
		BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(""));
		byte[] car = new byte[1024];
		int length;
		while ((length = inputStream.read()) != -1) {
			outputStream.write(car, 0, length);
		}
		outputStream.flush();
		outputStream.close();
		inputStream.close();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
6.缓冲字节流
try {
		BufferedReader reader = new BufferedReader(new FileReader("D:\\1.txt"));
		BufferedWriter writer = new BufferedWriter(new FileWriter("F:\\1.txt"));
		char[] car = new char[1024];
		int length;
		while ((length = reader.read(car)) != -1) {
			writer.write(car, 0, length);
		}
		writer.flush();
		writer.close();
		reader.close();F
	} catch (Exception e) {
		e.printStackTrace();
	}
7.转换流

字节流向字符流转换,解决读取字符文件时出现乱码

try {
		InputStreamReader reader=new InputStreamReader(new FileInputStream("D:\\1.txt"));
		OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream("F:\\1.txt"));
		char[] car = new char[1024];
		int length;
		while ((length = reader.read(car)) != -1) {
			writer.write(car, 0, length);
		}
		writer.flush();
		writer.close();
		reader.close();
	} catch (Exception e) {
		e.printStackTrace();
	}
8.释放资源:
try(
    FileInputStream inputStream=new FileInputStream("F:\\2.jpg");
	FileOutputStream outputStream=new FileOutputStream("D:\\2.jpg");
   ) {
			int data;
			while((data=inputStream.read())!=-1) {
				System.out.println(1/0);
				outputStream.write(data);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	public static void main(String[] args) {
		FileInputStream inputStream=null;
		FileOutputStream outputStream=null;
	try {
		inputStream=new FileInputStream("F:\\2.jpg");
		outputStream=new FileOutputStream("ddF:\\2.jpg");//地址错误,释放资源
		int data;
		while((data=inputStream.read())!=-1) {
			System.out.println(1/0);//使用异常中止,让其释放资源
			outputStream.write(data);
		}
		
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}finally {
		if (inputStream!=null) {
			try {
				inputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}
		if (outputStream!=null) {//做出判断,因地址错误,避免空指针异常
			try {
				outputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}
	}
FileInputStream inputStream=null;
	FileOutputStream outputStream=null;
	try {
		inputStream=new FileInputStream("D:\\ruanjian\\eclipse-jee-2021-06-M2-win32-x86_64.zip");
		outputStream=new FileOutputStream("F:\\eclipse-jee-2021-06-M2-win32-x86_64.zip");//地址错误,释放资源
		byte[] car=new byte[1024];
		int length;
		while((length=inputStream.read(car))!=-1) {
			outputStream.write(car,0,length);
		}
		outputStream.flush();
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}finally {
		if (inputStream!=null) {
			try {
				inputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}
		if (outputStream!=null) {//做出判断,因地址错误,避免空指针异常
			try {
				outputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}
	}

递归实现遍历指定目录中的所有文件和文件夹

public class Test{
	public static void main(String[] args) throws IOException {
		itearator(new File("C:\\"));
	}
	public static void itearator(File file){
		if(file.isDirectory()) {
			File[] listFiles = file.listFiles();
			if(listFiles != null) {
				for (int i = 0; i < listFiles.length; i++) {
					itearator(listFiles[i]);
				}
			}
			System.out.println(file.getPath());
		}else {
			System.out.println(file.getPath());
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值