1.File类型
1.1File的简介
File
类主要用于表示文件和目录的路径,能新建、删除、移动,重命名文件或文件夹,也能获取或者修改文件或文件夹的信息(如大小,修改时间等), 但File不能访问文件里的内容。如果需要访问文件里的内容,则需要使用输入/输出流。
1.2File常用的构造器
1.File(String pathname):
通过将指定字符串转换成抽象路径名来创建一个File实例2.File(File parent,String child)
从父抽象路径名和子路径名字符串创建新的 File实例,
3.File(String parent, String child)从父路径名字符串和子路径名字符串创建新的 File实例
1.3File常用的方法
检查文件或目录是否存在:通过
exists()
方法。创建新文件或目录:使用
createNewFile()
方法创建文件,mkdir()
方法创建单个目录,mkdirs()
方法创建多级目录。获取文件或目录的属性:如文件名(
getName()
)、路径(getPath()
)、父目录路径(getParent()
)、文件长度(length()
)等。删除文件或目录:
delete()
方法。列出目录中的文件和子目录:
listFiles()
方法。
1.4文件的查询
file.exist( )文件的查询
1.5文件的创建与删除
file.creatnewfile( )
file.delete( )
2.IO流类型
2.1.IO流的简介
在 Java 中,IO
流(输入/输出流)是用于处理数据输入和输出的一种机制。IO
流可以实现程序与外部数据源(如文件、网络连接、内存缓冲区等)之间的数据传输。输入流用于从数据源读取数据到程序中,而输出流用于将程序中的数据写入到外部目标。
2.2IO流的分类
按数据流向分:
- 输入流(
InputStream
和Reader
及其子类):用于从数据源读取数据到程序中。- 输出流(
OutputStream
和Writer
及其子类):用于将程序中的数据写入到外部目标。按处理数据的单位分:
- 字节流:
- 输入字节流:
InputStream
是所有输入字节流的父类,常见的子类如FileInputStream
(用于从文件读取字节)、BufferedInputStream
(提供缓冲功能的输入字节流)等。- 输出字节流:
OutputStream
是所有输出字节流的父类,常见的子类如FileOutputStream
(用于向文件写入字节)、BufferedOutputStream
(提供缓冲功能的输出字节流)等。- 字符流:
- 输入字符流:
Reader
是所有输入字符流的父类,常见的子类如FileReader
(用于从文件读取字符)、BufferedReader
(提供缓冲功能的输入字符流)等。- 输出字符流:
Writer
是所有输出字符流的父类,常见的子类如FileWriter
(用于向文件写入字符)、BufferedWriter
(提供缓冲功能的输出字符流)等。
2.3字节流
2.3.1 字节流的输入与输出
InputStream:是字节输入流的顶级父类,是抽象类。定义了基本的读取方法。操作本地文件的字节输出流,可以把程序中的数据写到本地文件中,
//创建对象
FileOutputStream fos = new FileOutputStream("D:\\dir1\\01.txt");//写入一个字母
fos.wirter(97);
//一次性写入多个
byte[] bytes = {10,24,98,99,100};
fos.write(bytes);//书写字符串
String str="asdasdasd";
byte[] bytes = str.getBytes();
fos.write(bytes);//关闭字节输出流
fos.close();
OutputStream:是字节输出流的顶级父类,也是抽象类,定义了基本的写出方法。操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来
//创建对象
FileInputStream fis = new FileInputStream("D:\\dir1\\01.txt");//读取一个数据
System.out.println(fis.read());
//for循环读取
for (int i = 0; i < fis.available(); i++) {
System.out.print((char) fis.read());
}
//while循环读取
int b;
while ((b = fis.read()) != -1) {
System.out.print((char) b);
}//关闭字节输入流
fis.close();
2.3.2字节流的拷贝
FileOutputStream fos = new FileOutputStream("D:\\dir1\\01.txt");
FileInputStream fis = new FileInputStream("D:\\dir2\\03.txt");
int b=-1;
while ((b = fis.read()) != -1) {
fos.write(b);
}
fis.close();
2.4字符流
在 Java 中,字符流(Reader
和 Writer
类及其子类)主要用于处理文本数据的输入和输出
字符流以字符为单位进行数据的读写操作,相较于字节流,它更适合处理人类可读的文本内容,例如文本文件、字符串等。
2.4.1字符流的输入
Reader
类是输入字符流的抽象基类,常见的子类如 FileReader
用于从文件中读取字符数据。
FileReader fr =new FileReader("D:/dir1/01.txt"); int ch; while((ch=fr.read())!=-1){ System.out.print((char)ch); } 一次读取1024个字节,加快效率 char[] buf = new char[1024]; int len; while((len=fr.read(buf))!=-1){ System.out.print(new String(buf,0,len)); } fr.close(); }
2.4.2字符流的输出
Writer
类是输出字符流的抽象基类,常见的子类如 FileWriter
用于向文件中写入字符数据。
public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("D:/dir1/01.txt"); fw.write("Hello World"); fw.close(); }
2.4.3字符缓冲流
BufferedReader
可以提供缓冲功能,提高读取效率,BufferedWriter
同样提供缓冲功能。
public static void main(String[] args) throws IOException { BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:/dir1/01.txt")); BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D:/dir2/02.txt")); int b; while((b= bis.read())!=-1){ bos.write(b); } bis.close(); bos.close(); }
2.5 转换流
在 Java 中,转换流主要用于在字节流和字符流之间进行转换。
InputStreamReader
用于将字节输入流转换为字符输入流,OutputStreamWriter
用于将字符输出流转换为字节输出流。
try (InputStream inputStream = new FileInputStream("input.txt"); InputStreamReader reader = new InputStreamReader(inputStream)) { int data; while ((data = reader.read())!= -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } // 将字符输出流转换为字节输出流 try (OutputStream outputStream = new FileOutputStream("output.txt"); OutputStreamWriter writer = new OutputStreamWriter(outputStream)) { writer.write("Hello, Conversion Stream!"); } catch (IOException e) { e.printStackTrace(); }