目录
一:File
二:字节流
一:File
1.1 File类的概述和构造方法
File:它是文件和目录路径名的抽象表示
文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。
将来是要通过具体的操作把这个路径的内容转换为具体存在的。
import java.io.File;
public class Main {
public static void main(String[] args) {
File f1=new File("D:\itcast\java.txt");
System.out.println(f1);
File f2=new File("D:\itcast", "java.txt");
System.out.println(f2);
File f3=new File("D:\itcast");
File f4=new File(f3, "java.txt");
System.out.println(f4);
}
}
1.2 File类创建功能
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
//1.在D:\itcast目录下创建一个文件java.txt
File f1=new File("D:\itcast\java.txt");
System.out.println(f1.createNewFile());
System.out.println("--------------");
//2.在D:\itcast目录下创建一个目录JavaSE
File f2=new File("D:\itcast\JavaSE");
System.out.println(f2.mkdir());
System.out.println("--------------");
//3.我要在D:\itcast目录下创建一个多级目录JavaWEB\HTML
File f3=new File("D:\itcast\JavaWEB\HTML");
System.out.println(f3.mkdirs());
}
}
1.3 File类判断和获取功能
public class Demo {
public static void main(String[] args) throws IOException {
File f=new File("D:\IT\java.txt");
// System.out.println(f.createNewFile());//创建java.txt
System.out.println(f.isFile());//判断是否为文件
System.out.println(f.exists());//判断文件是否存在
System.out.println(f.getAbsolutePath());//返回此抽象路径名的绝对路径名字符串
System.out.println(f.getPath());//将此抽象路径名转换为路径名字符串
System.out.println(f.getName());//返回由此抽象路径名表示的文件或目录的名称
File f1=new File("D:\IT\JavaSE");
// System.out.println(f1.mkdir());//创建JavaSE目录
System.out.println(f1.isDirectory());//判断是否为目录
File f2=new File("D:\IT\JavaW\HTML");
// System.out.println(f2.mkdirs());
File f3=new File("D:\IT");//返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
String[] list = f3.list();
for(String s:list){
System.out.print(s+" ");
}
System.out.println();
File[] files = f3.listFiles();//返回此抽象路径名表示的目录中的文件和目录的File对象数组
for(File file:files){
System.out.println(file+" ");
}
}
}
1.4 File类删除功能:
绝对路径和相对路径的区别:
绝对路径:完整的路径名,不需要任何其他信息就可以定位它所表示的文件。
如:D:\itcast\java.txt
相对路径:必须使用取自其他路径名的信息进行解释。
如:myFile\java.txt
1.5 递归
递归的概述:以编程的角度来看,递归指的是方法定义中调用方法本身的现象。
二:字节流
2.1 IO流概述和分类:
IO流概述
IO:输入/输出(Input/Output)流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输。IO流就是用来处理设备间数据传输问题的
常见的应用:文件复制;文件上传;文件下载。
IO流分类:
按照数据的流向
输入流:读数据
输出流:写数据
按照数据类型来分
字节流:
字节输入流;字节输出流
字符流:
字符输入流;字符输出流
如果数据通过Windows自带的记事本软件打开,我们还可以读懂里面的内容,就使用字符流,否则使用字节流。如果你不知道该使用哪种类型的流,就使用字节流。
2.2 字节流写数据
字节流抽象基类:
InputStream:这个抽象类是表示字节输出流的所有类的超类。OutputStream:这个抽象类是表示字节输出流的所有类的超类。子类名特点:子类名称都是以其父类名作为子类名的后缀。
FileOutputStream:文件输出流用于将数据写入File
FileOutputStream(String name):创建文件输出流以指定的名称写入文件。
使用字节输出流写数据的步骤:
创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)调用字节输出流对象的写数据方法释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
//创建字节输出流对象
//FileOutputStream(String name):创建文件输出流以指定的名称写入文件
FileOutputStream fos=new FileOutputStream(new File("mokuai-06\fos.txt"));
//void write(int b):将指定的字节写入此文件输出流
fos.write(97);
fos.write(57);
fos.write(55);
//最后都要释放资源
//void close():关闭此文件输出流并释放与此流相关联的任何系统资源
fos.close();
}
}
2.3 字节流写数据的3种方式
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
//创建字节输出流对象
//FileOutputStream(String name):创建文件输出流以指定的名称写入文件
FileOutputStream fos=new FileOutputStream(new File("mokuai-06\fos.txt"));
//FileOutputStream(File file):创建文件输出流以写入由指定的File对象表示的文件
fos.write(97);
//byte[] bys={97,98,99,100,101};
byte[] bys="abcdef".getBytes();//返回字符串对应的字节数组
fos.write(bys);
//void write(byte[] b,int off,int len):将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流一次写一个字节数组的部分数据
byte[] nys1="xyz".getBytes();
fos.write(nys1,0,nys1.length-1);
//最后都要释放资源
//void close():关闭此文件输出流并释放与此流相关联的任何系统资源
fos.close();
}
}
2.4 字节流写数据的两个小问题
字节流写数据如何实现换行呢?
Windows:rn
Linux:n
mac:r
字节流写数据如何实现追加写入呢?
public FileOutputStream(String name,boolean append)
创建文件输出流以指定的名称写入文件。如果第二个参数为TRUE,则字节将写入文件的末尾而不是开头。
package package01;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
//创建字节输出流对象
//FileOutputStream(String name):创建文件输出流以指定的名称写入文件
FileOutputStream fos=new FileOutputStream(new File("mokuai-06\fos.txt"),true);
//写数据
for(int i=0;i<10;i++){
fos.write("hello".getBytes());
fos.write("n".getBytes());
}
//最后都要释放资源
//void close():关闭此文件输出流并释放与此流相关联的任何系统资源
fos.close();
}
}
2.5 字节流写数据加异常处理:
finally:在异常处理时提供finally块来执行所有清除操作。比如说IO流的释放资源
特点:被finally控制的语句一定会执行,除非JVM退出。
2.6 字节流读数据(一次读一个字节数组数据)
步骤:1.创建字节输入流对象2.调用字节输入流对象的读数据方法3.释放资源
import java.io.*;
public class Demo {
public static void main(String[] args) throws IOException {
//根据数据源创建字节输入流对象
FileInputStream fis=new FileInputStream("D:\IT\desk.jpg");
//根据目的地创建字节输出流对象
FileOutputStream fos=new FileOutputStream(new File("mokuai-06\desk.jpg"));
//读写数据,赋值图片(一次读取一个字节数组,一次写入一个字节数据)
byte[] bys=new byte[1024];
int len;
while((len=fis.read(bys))!=-1){
fos.write(bys,0,len);
}
//释放资源
fos.close();
fis.close();
}
}



