IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java文件和IO流的使用 -> 正文阅读

[Java知识库]Java文件和IO流的使用

文件

File类并不是代表文件,它可以代表特定文件的名称,也可以是某个目录。

这里的名称就是路径,因为在Java中“\”被用作转义字符,所有Windows风格的路径最好用"\“来分隔,如:“c:\temp\test.txt”, 但在Linux下此路径就应该这样写: c:/temp/test.txt”。
如果要考虑跨平台,则最好这样写:
“c:”+File.separator+“temp” +File.separator+“文件名”

在这里插入图片描述

文件file 相关方法使用

package com.wdy.file;
import java.io.File;
import java.util.Date;
/**
 * 文件file 相关方法使用
 * @author wdy
 *
 */
public class FileDemo {

	public static void main(String[] args) throws Exception {
		
		File file = new File("D:\\abc.txt"); //创建文件对象
		file.createNewFile();  //该路径不存在的同名文件情况下,创建文件
		
		System.out.println("是否是文件夹: " +file.isDirectory());
		System.out.println("是否是文件: " +file.isFile());
		
		System.out.println(file.isHidden()); //文件是否隐藏
		System.out.println(new Date(file.lastModified()));//文件创建时间
		
		System.out.println(file.getTotalSpace()/1024/1024/1024+"G");//  字节/kb/M/G  计算硬盘总空间
		System.out.println(file.getFreeSpace()/1024/1024/1024+"G");//计算硬盘剩余空间
		
		
		File f = new File("C:\\");
		
		File[] fs = f.listFiles();  //.listFiles() 获取C盘下所有的文件和文件夹,放入数组
		
		for (File f2 : fs) {
			System.out.println(f2.getName());  //遍历显示
		}
		
		//file.delete();  //删除文件
		
	}
}

Demo 通过递归 查找c盘下所有文件

package com.wdy.file;
import java.io.File;
/**
 * file文件
 * 通过递归 查找c盘下所有文件
 * @author wdy
 *
 */
public class FileDemo02 {
		static int count = 0;
		public static void main(String[] args) {
			File file = new File("C:\\");		
			find(file);
			System.out.println("图片: " + count);

		}
			
		public static void find(File file) {
			if(file!=null && file.isFile()) {//如果是文件 递归终止条件
				String fileName = file.getName();
				
//				if(fileName.endsWith(".jpg")||fileName.endsWith(".png")) {  //.endswith()  查找 .jpg 和 . png
//					count++;
//					System.out.println(fileName);
//				}		
				return;
			}
			
			File[] fs = file.listFiles();  //查找C盘下的所有文件夹
			
			if(fs!=null) {
				for (File f : fs) {
					find(f); //对每个子文件夹进行 递归调用
				}
			}
		}
}


File和流

File类关心得是磁盘上存储的文件,而流是指程序运行中数据的通道信道,流类关心的是文件的内容。

输入流和输出流

  • 输入流就是从外部读取数据进入程序,然后由程序处理。通过read方法把内容读到流管道。InputStream类是所有输入流类的基类。InputStream类是抽线类,没有构造方法,一般使用它的子类来实现读入,如FileInputStream类、

  • 输出流是以程序为起点输出数据。通过write方法把内容写到流管道。OutputStream类是所有输出流的基类。也是一个抽象类。

字节流和字符流

  • 字节流以字节的形式来处理数据
  • 字符流以字符的形式来处理数据

输入流 Demo: 读取指定文件内容

获取当前文件位置的方法:
1)右击java文件 ——Properties——查看绝对路径
2)利用线程获取bin文件夹位置,再进行修改

用字节流读取出现乱码(中文乱码)如何解决?
1)采用包装模式:字节流——>字符流
InputStreamReader
2)直接用字符流读取 Reader类

try…with…resource 捕获异常 :
使用条件:出现异常的类实现了Closeable接口
如Reader类实现了Closeable接口

package com.wdy.stream;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
/*
 * 把FileDemo02读入到流。(输入流)
 * 循环在程序中显示读到的内容
 * 利用线程获取当前文件夹的位置
 * 包装模式。字节流——>字符流
 */
public class InputStreamDemo {
	public static void main(String[] args) {

		String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();//当前线程。类加载器。从根目录开始获取 bin。显示为字符串的形式
		System.out.println(path);
		path =path.substring(0, path.length()-4);  //截取字符串
		System.out.println(path);
		String fileName = path+"src/io/file/FileDemo02.java"; //拼接字符串 尾部

		// 包装模式
		// InputStreamReader(类)  把字节流(FileInputStream)包装成字符流 否则中文会乱码
		 try(InputStreamReader r = new InputStreamReader(new FileInputStream(fileName));){
			 
			 int n = 0;
			 
			 while((n=r.read())!=-1) {
				 System.out.print((char)n);
			 }		 
			 
		 }catch(Exception e) {
			 e.printStackTrace();  //打印异常
		 }
	}
}    

用字符流读取:Reader

package com.wdy.stream;
import java.io.FileReader;
import java.io.Reader;

/*
 * 使用字符流读取
 */
public class ReaderDemo {
	public static void main(String[] args) {		
		String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
		System.out.println(path);
		path =path.substring(0, path.length()-4);
		System.out.println(path);
		String fileName = path+"src/io/file/FileDemo02.java";
		
		
		//读取字符流
		try(Reader in = new FileReader(fileName);){//try...with...resource 捕获异常   使用条件:Reader类型实现了Closeable接口
			int n = 0;
			
			while((n = in.read())!=-1){
				System.out.print((char)n);
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}		
	}
}

输出流

1)输出流:即在指定文件写内容的操作方法

2)OutputStream底层实现了Closeable接口 (关闭的接口) 、flushable接口(缓存的接口)

在这里插入图片描述

3)提高拷贝效率的方式 :
缓存:创建1024字节大小的数组中。讲数据先读入数组(缓存)中

4).close() 底层包含了flush()方法,flush()方法可以省略
在这里插入图片描述
5)音视频拷贝使用字节流

输入流demo1:用字节流完成输出流 。在文件中写入一个字符。通过write方法把内容写到流管道

package com.wdy.stream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
/*
 * 字节输出流的两种写法
 */
public class OutStreamDemo {
public static void main(String[] args) throws Exception {
		
//		try(OutputStream out = new FileOutputStream("D:\\out.txt", false);){
//			out.write('a');
//			
//		}catch (Exception e) {
//			e.printStackTrace();
//		}
		
		OutputStream out = new FileOutputStream("D:\\out.txt", false);
		out.write('c');
		out.flush();
		out.close();
	}	
}

输入流demo2:用字符流完成输入流 。在文件中写入字符串

package com.wdy.stream;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class WriterDemo {
	public static void main(String[] args) throws Exception {
		Writer out = new FileWriter("D:\\outw.txt", true); //true和false false取决于是在文件中直接写入字符流  true是再文件内容尾部追加
		out.write("test...");   
//		out.flush();//字符流相当于包装的字节流。字符流写入文件需要一个缓存时间
		out.close();//关闭 close()底层调用了flush()方法,flush可以神略
		

	}
}

输入流demo3:视频拷贝。利用缓存提高效率

package com.wdy.stream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/*
 * demo进行视频拷贝
 *  输入流 先读取一个视频(视频用字节流)
 *      再写入一个视频 
 */
public class CopyDemo {
	public static void main(String[] args) throws Exception {
		
		InputStream in  = new FileInputStream("D:\\dyit\\20220202\\video\\IO-File.mp4");//输入流 
		OutputStream out = new FileOutputStream("D:\\copyMovie.mp4"); //输出流
		
		byte[] buffer = new byte[1024];//缓存概念  创建一个缓存数组
		long s1 = System.currentTimeMillis();// 拷贝时间
		
		while(in.read(buffer)!=-1) { // .read() 将字符读入数组中的某一部分。 
			out.write(buffer);  //写入缓存(数组)中
		}
		
		long s2 = System.currentTimeMillis();
		System.out.println("拷贝耗时: " + (s2-s1));
		
		out.close();//关闭  已经包含flush()
		in.close();
	} 
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 21:35:51  更:2022-02-05 21:38:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:26:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码