1.File类
1.1 File类的概述和使用
package demo01IO;
/*
File类:路径和文件名的抽象表示
*/
import java.io.File;
public class Demo01File {
public static void main(String[] args) {
File f1=new File("E://itcast");
System.out.println(f1);
File f2=new File("E://itcast","java.text");
System.out.println(f2);
File f3=new File("E://itcast");
File f4=new File(f3,"java.txt");
System.out.println(f4);
}
}
1.2 创建文件夹或文件
package demo01IO;
import java.io.File;
import java.io.IOException;
/*
创建文件和目录
*/
public class Demo02File {
public static void main(String[] args) throws IOException {
//创建文件
File f1 =new File("E:\\java.txt");
System.out.println(f1.createNewFile());
//创建单极目录
File f2=new File("E:\\beifen\\nihao");
System.out.println(f2.mkdir());
//创建多级目录
File f3=new File("E:\\ni\\shi\\shui");
System.out.println(f3.mkdirs());
}
}
1.3 文件的获取和判断
package demo01IO;
import java.io.File;
/*
File的判断和获取功能
*/
public class Demo03File {
public static void main(String[] args) {
File f1 =new File("E:\\beifen\\java.txt");
//判断是否为文件
System.out.println(f1.isFile());
//判断是否为目录
System.out.println(f1.isDirectory());
//判断是否存在
System.out.println(f1.exists());
/*
true
false
true
*/
//获取绝对路径
System.out.println(f1.getAbsoluteFile());
//获取文件名
System.out.println(f1.getName());
//路径名字符串
System.out.println(f1.getPath());
/*
E:\beifen\java.txt
java.txt
E:\beifen\java.txt
*/
//获取文件夹的文件名(String格式)
File f2=new File("E:\\beifen");
String[] list = f2.list();
for(String s:list){
System.out.println(s);
}
/*
HUAWEI Mate 20 Pro_2021-03-20 16.48.42
images
java.txt
nihao
WeiXin
*/
//获取文件夹的文件名(文件格式)
File[] files = f2.listFiles();
for(File f:files){
if(f.isFile()){
System.out.println(f.getName());
}
}
/*
java.txt
*/
}
}
1.4 File删除操作
package demo01IO;
import java.io.File;
import java.io.IOException;
public class Demo04FileDelete {
public static void main(String[] args) throws IOException {
File f1=new File("java.txt");
//System.out.println(f1.createNewFile());
//删除当前文件
//System.out.println(f1.delete());
File f2=new File("itcast");
System.out.println(f2.mkdir());
//删除当前文件夹
//System.out.println(f2.delete());
File f3=new File("itcast\\java.txt");
System.out.println(f3.createNewFile());
System.out.println(f3.delete());
System.out.println(f2.delete());
}
}
/*
false
false
true
true
*/
注:当文件夹下有内容时,不能直接删除文件夹。
1.5 递归
package demo01IO;
/*
递归:方法调用自己
用递归方法和普通方法求斐波那契数列
*/
public class Demo05DiGui {
public static void main(String[] args) {
//普通方法
int[]arr=new int[100];
arr[0]=1;
arr[1]=1;
int n=20;
for(int i=2;i<n;i++){
arr[i]=arr[i-1]+arr[i-2];
}
System.out.println(arr[19]);
System.out.println(f(20));
}
//递归
public static int f(int m){
if(m==1||m==2){
return 1;
}else{
return f(m-1)+f(m-2);
}
}
}
/*
6765
6765
*/
1.6 递归去求阶乘
package demo01IO;
/*
递归求阶乘
*/
public class Demo06DiGui {
public static void main(String[] args) {
System.out.println("5的阶乘是:"+jc(5));
}
public static int jc(int n){
if(n==1){
return 1;
}else{
return n*jc(n-1);
}
}
}
//5的阶乘是:120
1.7 递归输出文件夹下的所有文件
package demo01IO;
import java.io.File;
/*
遍历目录
*/
public class Demo07DiGui {
public static void main(String[] args) {
File f1=new File("E:\\work");
getFile(f1);
}
public static void getFile(File f){
File[] files = f.listFiles();
if(files!=null){
for(File fi:files){
if(fi.isDirectory()){
getFile(fi);
}else{
System.out.println(fi.getName());
}
}
}
}
}
2 字节流
2.1 IO流的概述
字符流:打开记事本看得懂
字节流:记事本上看不懂的
2.2 使用字节流写入数据
package demo02IO;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
使用字节流写数据
*/
public class Demo01 {
public static void main(String[] args) throws IOException {
//创建字节流输出对象
FileOutputStream fos=new FileOutputStream("fos.txt");
//输入数据
fos.write(97);
//关闭字节流,释放资源
fos.close();
}
}
2.3 字节流写入的三种方式
package demo02IO;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
字节流写入的3种方式
*/
public class Demo02 {
public static void main(String[] args) throws IOException {
FileOutputStream fos2=new FileOutputStream("fos2.txt");
//写入
fos2.write(97);
byte[] bys = "刘老根".getBytes();
fos2.write(bys);
byte[] bys2 = "abcde".getBytes();
fos2.write(bys2,2,3);
fos2.close();
}
}
2.4 字节流写入数据的两个注意事项
package demo02IO;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
字节流写数据的2个小问题
*/
public class Demo03 {
public static void main(String[] args) throws IOException {
//追加写入
FileOutputStream fos3=new FileOutputStream("fos3.txt",true);
//换行
for(int i=0;i<10;i++){
fos3.write("hello".getBytes());
fos3.write('\n');
}
fos3.close();
}
}
2.5 字节流写入数据时加入异常处理
package demo02IO;
import java.io.FileOutputStream;
import java.io.IOException;
/*
字节流写数据加入异常处理
*/
public class Demo04 {
public static void main(String[] args) {
FileOutputStream fos=null;
try {
fos=new FileOutputStream("fos.txt");
fos.write(97);
}catch (IOException e){
e.printStackTrace();
}finally {
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
2.6 字节流读数据
package demo02IO;
import java.io.FileInputStream;
import java.io.IOException;
/*\
字节流读数据
*/
public class Demo05IORead {
public static void main(String[] args)throws IOException {
FileInputStream fis=new FileInputStream("fos.txt");
int by;
while((by=fis.read())!=-1){
System.out.print((char)by);
}
}
}
/*
a
xiaoming
shunfeng
*/
2.7 复制文本文件
package demo02IO;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
字节流复制文本文件
*/
public class Demo06CopyTxt {
public static void main(String[] args) throws IOException {
//获取初始路径
FileInputStream fis=new FileInputStream("E:\\work\\三方协议.txt");
//获取复制后的路径
FileOutputStream fos=new FileOutputStream("sanfang.txt");
//读取并写入
int by;
while((by=fis.read())!=-1){
fos.write(by);
}
fis.close();
fos.close();
}
}
2.8 字节流读取字节数组
package demo02IO;
import java.io.FileInputStream;
import java.io.IOException;
/*
字节流读取字符数组
*/
public class Demo07IORead {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("fos.txt");
byte[] by=new byte[1024];//一般为1024的整数倍
int len;
while((len=fis.read(by))!=-1){
System.out.println(new String(by));
}
//释放资源
fis.close();
}
}
/*
a
xiaoming
shunfeng
*/
2.9 复制图片
package demo02IO;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
字节流复制图片
*/
public class Demo08IOImage {
public static void main(String[] args) throws IOException {
//创建输入流
FileInputStream fis=new FileInputStream("C:\\Users\\49161\\Pictures\\1.jpg");
//创建输出流
FileOutputStream fos=new FileOutputStream("1.jpg");
//使用字节数组的方式来复制
byte[]bys=new byte[1024];
int len;
while((len=fis.read(bys))!=-1){
fos.write(bys);
}
fos.close();
fis.close();
}
}
2.10 字节缓冲流读写数据
package demo03;
import java.io.*;
/*
字节缓冲流读写数据
*/
public class Deom01 {
public static void main(String[] args) throws IOException {
//写入
//BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("bos.txt"));
//bos.write("hello".getBytes());
//读取
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("bos.txt"));
byte[]bys=new byte[1024];
int len;
while((len=bis.read(bys))!=-1){
System.out.println(new String(bys));
}
bis.close();
}
}
字节流复制视频的两种方式:
package demo03;
import java.io.*;
//字节流复制视频
public class Demo01 {
public static void main(String[] args) throws IOException {
long startTime=System.currentTimeMillis();
//method1();//共历时1995毫秒
method2();//共历时316毫秒
long endTime=System.currentTimeMillis();
long tim=endTime-startTime;
System.out.println("共历时"+tim+"毫秒");
}
public static void method1() throws IOException{
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:\\Users\\49161\\Videos\\test.mp4"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("test.mp4"));
int by;
while((by=bis.read())!=-1){
bos.write(by);
}
bis.close();
bos.close();
}
public static void method2() throws IOException{
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:\\Users\\49161\\Videos\\test.mp4"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("test.mp4"));
byte[]bys=new byte[1024];
int len;
while((len=bis.read(bys))!=-1){
bos.write(bys,0,len);
}
bis.close();
bos.close();
}
}
本文详细介绍了Java中的File类,包括文件和文件夹的创建、获取、删除等操作,以及如何通过递归实现文件夹内容的遍历。接着,文章深入探讨了字节流的概念,讲解了字节流的写入和读取数据的方法,包括异常处理和字节缓冲流的使用,并给出了文件和图片的复制示例。
991

被折叠的 条评论
为什么被折叠?



