java中的I/O(8个案例+代码+效果图)
目录
2)File(String parent, String child)
3)File(File parent, String child)
3)boolean createNewFile() throws IOException
14)boolean renameTo(File dest)
1.File类
1)常用构造方法
-
1)File(String pathname)
- 通过将给定的路径名字符串转换为抽象路径名来创建一个新的
File
实例。 - 参数:
pathname
- 一个路径名字符串。
- 通过将给定的路径名字符串转换为抽象路径名来创建一个新的
-
2)File(String parent, String child)
- 根据父路径名字符串和子路径名字符串创建一个新的
File
实例。 - 参数:
parent
- 父路径名字符串。child
- 子路径名字符串。
- 根据父路径名字符串和子路径名字符串创建一个新的
-
3)File(File parent, String child)
- 根据父抽象路径名和子路径名字符串创建一个新的
File
实例。 - 参数:
parent
- 抽象路径名作为此路径名的前缀。child
- 字符串作为此路径名的更多名称。
- 根据父抽象路径名和子路径名字符串创建一个新的
2)常用方法
-
1)boolean canRead()
- 测试应用程序是否可以读取该文件。
- 返回值:如果文件可读,则返回
true
。
-
2)boolean canWrite()
- 测试应用程序是否可以修改该文件。
- 返回值:如果文件可写,则返回
true
。
-
3)boolean createNewFile()
throws IOException- 当且仅当不存在具有此抽象路径名指定名称的文件时,原子地创建一个由该抽象路径名命名的新空文件。
- 返回值:如果操作成功则返回
true
;如果已经存在这样的文件,则返回false
。 - 异常:可能抛出
IOException
。
-
4)boolean delete()
- 删除由此抽象路径名表示的文件或目录。
- 返回值:如果成功删除了文件或目录,则返回
true
;否则返回false
。
-
5)boolean exists()
- 测试此抽象路径名表示的文件或目录是否存在。
- 返回值:如果文件或目录存在,则返回
true
。
-
6)String getName()
- 返回由此抽象路径名表示的文件或目录的名称。
- 返回值:此抽象路径名表示的文件或目录的名称。
-
7)String getPath()
- 将此抽象路径名转换为路径名字符串。
- 返回值:表示此抽象路径名的路径名字符串。
-
8)boolean isDirectory()
- 测试此抽象路径名表示的文件是否是一个目录。
- 返回值:如果此抽象路径名表示的文件是一个目录,则返回
true
。
-
9)boolean isFile()
- 测试此抽象路径名表示的文件是否是一个标准文件。
- 返回值:如果此抽象路径名表示的文件是一个标准文件,则返回
true
。
-
10)long length()
- 返回由此抽象路径名表示的文件的长度。
- 返回值:此抽象路径名表示的文件的长度(以字节为单位),如果文件不存在,则返回
0L
。
-
11)String[] list()
- 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
- 返回值:指定目录中文件和目录名称的字符串数组,如果此抽象路径名不表示一个目录,或者发生 I/O 错误,则返回
null
。
-
12)File[] listFiles()
- 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
- 返回值:表示目录中文件的抽象路径名数组,如果此抽象路径名不表示一个目录,或者发生了 I/O 错误,则返回
null
。
-
13)boolean mkdir()
- 创建由此抽象路径名命名的目录。
- 返回值:如果已成功创建目录,则返回
true
;如果由于父路径不存在等原因而无法创建目录,则返回false
。
-
14)boolean renameTo(File dest)
- 重新命名此抽象路径名表示的文件。
- 参数:
dest
- 新的抽象路径名。 - 返回值:如果重命名成功,则返回
true
;否则返回false
。
3)案例:File类的简单使用
1.代码
package org.xiji.javaio; import java.io.File; import java.io.IOException; public class FileOne { public static void main(String[] args) throws IOException { //创建一个文件对象 File file = new File("D:\\myFirst\\myTxt.txt"); System.out.println("文件是否存在:"+file.exists()); //创建这个是创建的目录 File file1 = new File("D:\\myFirst"); file1.mkdir(); System.out.println("文件是否存在:"+file.exists()); //创建文件 boolean newFile = file.createNewFile(); System.out.println("文件是否创建成功:"+newFile); System.out.println("文件是否是绝对路径:"+file.isAbsolute()); System.out.println("文件是否是目录:"+file.isDirectory()); System.out.println("文件是否是文件:"+file.isFile()); System.out.println("文件是否可读:"+file.canRead()); System.out.println("文件是否可写:"+file.canWrite()); System.out.println("文件是否隐藏:"+file.isHidden()); System.out.println("文件大小:"+file.length()); System.out.println("文件最后修改时间:"+file.lastModified()); System.out.println("文件名:"+file.getName()); System.out.println("文件路径:"+file.getPath()); System.out.println("文件绝对路径:"+file.getAbsolutePath()); System.out.println("文件父路径:"+file.getParent()); System.out.println("文件是否是临时文件:"+file.isHidden()); } }
2.效果
4)遍历目录下的文件
1.代码
package org.xiji.javaio; import java.io.File; public class FileFor { public static void main(String[] args) { //遍历某个文件夹下的文件 String path = "D:\\myFirst"; File file = new File(path); File[] files = file.listFiles(); for (File file1 : files) { System.out.println(file1.getName()); } } }
2.效果
5)遍历遍历文件以及文件夹下的所有文件
1.代码
package org.xiji.javaio; import java.io.File; public class FileForTwo { public static void main(String[] args) { //递归遍历 String path = "D:\\myFirst"; File file = new File(path); myListFiles(file); } //文件递归遍历 public static void myListFiles(File file) { File[] files = file.listFiles(); //判断文件是否为空 if(files == null) { return; } //遍历 for (File file1 : files) { //判断是否为文件夹,是文件夹就继续遍历,不是就输出名字 if(file1.isDirectory()) { myListFiles(file1); } System.out.println(file1.getName()); } } }
2.效果
2.字节流
字节流用于读写二进制数据。Java中的字节流主要基于InputStream
和OutputStream
抽象类。
-
1)InputStream
-
这是所有字节输入流的超类。它定义了从源读取数据的基本方法。
-
1)int read()
- 从输入流中读取下一个字节的数据。返回值范围是0到255。如果已经到达流的末尾,则返回-1。
-
2)int read(byte[] b)
- 尝试从流中读取一定数量的字节,并将其存储在参数b指定的缓冲区中。返回实际读取的字节数;如果到达流的末尾,则返回-1。
-
3)void close()
- 关闭该流并释放与之关联的所有系统资源。
-
-
2)OutputStream
-
这是所有字节输出流的超类。它定义了将数据写入目标的基本方法。
-
1)void write(int b)
- 将指定的字节写入此输出流。
-
2)void write(byte[] b)
- 将b.length个字节从指定的字节数组写入此输出流。
-
3)void flush()
- 刷新该流的缓冲区。
-
4)void close()
- 关闭此输出流并释放与此流相关的任何系统资源。
-
具体实现类如FileInputStream
、FileOutputStream
等提供了文件相关的读写功能。
3)案例:文件读取
1.代码
package org.xiji.javaio; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class FileInput { public static void main(String[] args) throws IOException { //读取文件 String path = "D:\\myFirst\\myTxt.txt"; //文件读取流 FileInputStream fis = new FileInputStream(path); int readInfo = 0; //读取文件 while (true) { readInfo = fis.read(); if (readInfo == -1) { break; } System.out.println(readInfo); } System.out.println("可以看到读取的内容是一些数组,不是文件中的字符串"); } }
2.效果
4)案例:文件写入
1.代码
package org.xiji.javaio; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class FileOutPut { public static void main(String[] args) throws IOException { String containInfo = "这是我通过这些输入到文件中的内容"; FileOutputStream myOutputStream = new FileOutputStream("D:\\myFirst\\myOutputStream.txt"); try { //转化为数组并且写入 myOutputStream.write(containInfo.getBytes()); System.out.println("写入完成"); } catch (Exception e) { e.printStackTrace(); }finally { myOutputStream.close(); } } }
2.效果
5)案例:文件的复制
1.代码
package org.xiji.javaio; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class MyCopy { public static void main(String[] args) throws IOException { System.out.println("文件的复制"); //文件读取流 FileInputStream fileInputStream = new FileInputStream("D:\\myFirst\\myTxt.txt"); //文件输出流 FileOutputStream fileOutput = new FileOutputStream("D:\\myFirst\\myTxtCopy.txt"); //缓冲变量 int len = 0; //定义每次读取长度1024 byte[] bytes = new byte[1024]; while ( (len =fileInputStream.read(bytes)) != -1 ) { //文件读取 fileOutput.write(bytes,0,len); } fileInputStream.close(); System.out.println("复制完成"); } }
2.效果
3.字符流
字符流用于读写字符文本。它们以Unicode编码形式处理数据。Java中的字符流主要基于Reader
和Writer
抽象类。
-
Reader
-
这是所有字符输入流的超类。
-
1)int read()
- 读取单个字符。
-
2)int read(char[] cbuf)
- 尝试读取多个字符并将它们存放到数组cbuf中。
-
3)void close()
- 关闭流。
-
-
Writer
-
这是所有字符输出流的超类。
-
1)void write(int c)
- 写入单个字符。
-
2)void write(char[] cbuf)
- 写入一个字符数组。
-
3)void write(String str)
- 写入一个字符串。
-
4)void flush()
- 刷新流。
-
5)void close()
- 关闭流。
-
具体实现类如FileReader
、FileWriter
等提供了文件相关的读写功能。
6)案例:字符流的读取
1.代码
package org.xiji.javaio; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class MyReaderFile { public static void main(String[] args) throws IOException { //文件字符读取流 FileReader fr = new FileReader("D:\\myFirst\\myTxt.txt"); int read = 0; //文件读取 while (true) { read = fr.read(); if (read == -1) { break; } System.out.println((char) read); } } }
2.效果
可以看到每次读取的都是一个字符,而不是像FileInputStream读取的一样是乱码
7)案例:简易记事本
1.代码
package org.xiji.javaio; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class MyNotePad { public static void main(String[] args) throws IOException { // 文件路径 String path = "D:\\myFirst\\"; Scanner sc = new Scanner(System.in); while (true) { System.out.println("输入1继续添加内容"); System.out.println("输入2退出"); if (sc.nextInt() == 2) { break; } System.out.println("输入记事本名字:"); String myTxtName = sc.next(); FileWriter fw = new FileWriter(path+myTxtName+".txt"); //文件内容 System.out.println("输入记事本内容:"); String myContain = sc.next(); fw.write(myContain); fw.close(); } } }
2.效果
原文地址:https://blog.csdn.net/2301_76862031/article/details/142798639
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!