java将数组数据逐⾏写⼊txt_Java进阶:JavaFileIO—1
⽬录
⼀、File 类
⼆、IO流
三、字节输出流
四、字节输⼊流
五、字节流⽂件复制
六、字符输出流
七、字符输⼊流
⼋、字符流复制⽂本⽂件
⼀、File 类
1. 概述
⽂件 和 ⽬录路径名 的抽象表达形式
Java中把⽂件或者⽬录(⽂件夹)都封装成 File对象
我们要去操作硬盘上的⽂件,或者⽂件夹只要到 File这个类即可
filter过滤对象数组File类对象,只是路径名的 抽象表⽰形式,即使该⽂件在操作系统上并不物理存在,也可以创建这个路径所表⽰的File对象
2. 构造⽅法
File(String pathname):通过给定 路径名字符串 转换为 抽象路径名 来创建⼀个新 File 实例
windows中的路径或⽂件名不区分⼤⼩写,但是最好别这样,跨平台可能会出现问题
File(String parent, String child):根据 parent 路径名字符串 和 child 路径名字符串,创建⼀个新 File 实例
好处: 单独操作⽗路径和⼦路径
File(File parent, String child):根据 parent 抽象路径名 和 child 路径名字符串,创建⼀个 File 实例
好处: ⽗路径是File类型,⽗路径可以直接调⽤File类⽅法
public class Test { public static void main(String[] args) { /* * File(String pathname) * 传递路径名: 可以写到⽂件夹,可以写到⼀个⽂件 */ File
3. File 类成员⽅法
—创建功能—
public boolean createNewFile():创建⽂件,如果⽂件已存在,不再创建
public boolean mkdir():创建单级⽂件夹,如果⽂件夹已存在,不再创建
public boolean mkdirs():创建多级⽂件夹,⽂件夹已经存在了,不再创建
mkdirs() 也可以创建单级⽂件夹,所以推荐使⽤ mkdirs()
—删除功能—
public boolean delete(): 删除⽂件或者⽂件夹,不⾛回收站,直接从硬盘删除!
如果此路径名表⽰⼀个⽬录,则该⽬录 必须为空 才能删除。
—重命名功能—
public boolean renameTo(File dest): 重新命名⽂件
—判断功能—
public boolean isFile() :判断File构造⽅法中封装的路径是不是⽂件
public boolean isDirectory():判断File构造⽅法中封装的路径是不是⽂件夹
public boolean exists(): 判断File构造⽅法中封装的路径是否存在
public boolean canRead() :读权限
public boolean canWrite() :写权限
public boolean isHidden() :是否隐藏
—基本获取功能—
public String getAbsolutePath():获取绝对路径,返回 String 对象
public File getAbsoluteFile():获取绝对路径,返回 file 对象(推荐使⽤)
eclipse和 IDEA环境中,写⼀个相对路径,获取的绝对位置是⼯程根⽬录
public String getPath():将抽象路径名转换为字符串(就相当于 toString)
public String getName():返回路径中表⽰的⽂件名或者⽂件夹名 (获取路径中的最后部分的名字)
public long length() :返回路径中表⽰的⽂件的字节数(⽂件夹为 0)
public long lastModified() :上次修改的时间
String getParent(): 获取⽗路径,返回String对象
File getParentFile(): 获取⽗路径,返回File对象(推荐使⽤)
4. File类⾼级获取功能
public String[] list()
获取到 File 构造⽅法中封装的路径中的⽂件和⽂件夹名 (遍历⼀个⽬录),返回只有名字。如果此抽象路径名不表⽰⼀个⽬录,那么此⽅法
将返回 nul,返回的是⼀个字符串数组,不会递归的获取⼦⽬录中的信息(⽂件或者⽬录的名称)。
public File[] listFiles()
获取到 File 构造⽅法中封装的路径中的⽂件和⽂件夹名 (遍历⼀个⽬录),返回的是⽬录或者⽂件的 全路径
返回⼀个 File对象数组。不会递归的获取⼦⽬录中的信息(⽂件或者⽬录的名称)
注意:在获取指定⽬录下的⽂件或者⽂件夹时必须满⾜下⾯两个条件
1)指定的⽬录必须存在
2)指定的必须是⽬录。否则容易引发返回数组为null,出现NullPointerException
5. ⽂件过滤器
listFiles(FileFilter filter) : 传递 FileFilter 接⼝的实现类
FileFilter 接⼝:
必须⾃定义 FileFilter 接⼝实现类,重写抽象⽅法,然后将接⼝实现类对象传递到遍历⽅法 listFiles
boolean accept(File pathname) 返回 true 满⾜条件,回false不满⾜过滤条件
过滤器中的 accept() ⽅法接受⼀个参数,这个参数就当前⽂件或⽂件夹对象(全路径)
FilenameFilter接⼝:
过滤器中的 accept() 接受两个参数,⼀个当前⽂件或⽂件夹所在的路径,⼀个是当前⽂件或⽂件夹对象的名称
boolean accept(File dir, String name) 返回true满⾜条件,回false不满⾜过滤条件
当我们需要过滤⽂件名称时就可以使⽤ FilenameFilter 这个过滤器,当我们想对当前⽂件或⽂件夹进⾏过滤,就可以使⽤ FileFilter
对于⼀个⽬录下,⽂件或⽂件⽬录的筛选⼯作代码:
不变——筛选过程
变化——筛选条件
原理分析
listFiles() 遍历⽬录的同时,获取到了⽂件名全路径,调⽤过滤器的⽅法 accept(),将获取到的路径传递给 accept(),accept() ⽅法接收
了参数,参数是 listFiles 传递来的,在 accept()⽅法中,进⾏判断,如果满⾜过滤条件,返回true,否则返回false,⼀旦⽅法返回了
true,listFiles 就将路径保存到 File数组 中
6. 递归遍历全⽬录
public class FileDemo { public static void main(String[] args) { File dir = new File("E:a"); getAllDir(dir); } // 定义⽅法,实现⽬录的全遍历 private static
⼆、IO流
1. 概述
IO流⽤来处理设备之间的 数据传输
Java对数据的操作是通过 流 的⽅式
Java⽤于操作流的对象都在 IO包 中(input/output)
Output操作:把内存中的数据存储到持久化设备上这个动作称为输出(写)
Input操作:把持久设备上的数据读取到内存中的这个动作称为输⼊(读)
流的分类:
流按流向分为两种:
输出流:内存——>外设(写出数据)
输⼊流:磁盘——>内存(读⼊数据)
流按操作类型分为两种:
字节流:字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
字符流:字符流只能操作纯字符数据,⽐较⽅便。
2. IO流常⽤⽗类
字节流的抽象⽗类:InputStream ,OutputStream
字符流的抽象⽗类:Reader , Writer
三、字节输出流
1. 概述
java.io.OutputStream 此抽象类,是表⽰输出字节流的所有类的超类。操作的数据都是 字节
2. OutputStream 的核⼼⽅法:
void close(): 关闭此输出流并释放与此流有关的所有系统资源。
close的常规协定:该⽅法将关闭输出流。关闭的流不能执⾏输出操作,也不能重新打开。
如果流对象建⽴失败了,需要关闭资源吗?
new 对象的时候,失败了,没有占⽤系统资源;释放资源的时候,对流对象判断null,变量不是null,对象建⽴成功,需要关闭资源
write(byte[] b): 将 b.length 个字节从指定的 byte 数组写⼊此输出流
write(byte[] b, int off, int len):将指定 byte 数组中从偏移量 off 开始的 len 个字节写⼊此输出流。
write(int b): 将指定的字节写⼊此输出流。write 的常规协定:向输出流写⼊⼀个字节。要写⼊的字节是参数 b 的⼋个低位。b 的 24 个
⾼位将被忽略。
3. FileOutputStream 类
(1) 构造⽅法
FileOutputStream(File file) :创建⼀个向指定 File 对象表⽰的⽂件中写⼊数据的⽂件输出流。
FileOutputStream(File file, boolean append): 创建⼀个向指定 File 对象表⽰的⽂件中写⼊数据的⽂件输出流,以追加的⽅式写⼊。FileOutputStream(String name) :创建⼀个向具有指定名称的⽂件中写⼊数据的输出⽂件流。
FileOutputStream(String name, boolean append) :创建⼀个向具有指定 name 的⽂件中写⼊数据的输出⽂件流,以追加的⽅式写
⼊。
(2) 流对象的使⽤步骤:
创建流⼦类的对象,绑定数据⽬的
调⽤流对象的⽅法write写
close释放资源
注意事项:流对象的构造⽅法,可以创建⽂件,如果⽂件存在,直接覆盖
public class IoDemo { public static void main(String[] args) throws IOException { //创建流⼦类的对象,绑定数据⽬的 FileOutputStream fos = new FileOutp
4. ⽂件的续写和换⾏
(1)实现数据的换⾏
在⽂件中,写⼊换⾏符号换⾏:
可以写在上⼀⾏的末尾, 也可以写在下⼀⾏的开头
fos.write("hello".getBytes());1
(2)关于数据的追加写⼊
默认情况下,当⼀个⽂件输出流对象,指向⼀个⽂件的时候,会清空⽂件内容
必须使⽤特殊的构造⽅法实现⽂件的追加写⼊,FileOutputStream构造⽅法, 的第⼆个参数中加⼊ true
//实现追加写⼊:
FileOutputStream fos = new FileOutputStream(file, true);1
5. IO异常的处理
⼀些细节:
保证流对象变量,作⽤域⾜够
catch⾥⾯处理异常
输出异常的信息,⽬的看到哪⾥出现了问题,停下程序,重新尝试
如果流对象建⽴失败了,需要关闭资源吗
new 对象的时候,失败了,没有占⽤系统资源;释放资源的时候,对流对象判断 null;变量不是 null,对象建⽴成功,需要关闭资源
public class FileOutputStreamDemo3 { public static void main(String[] args) { File file = new File(""); //try 外⾯声明变量,try ⾥⾯建⽴对象,为了提
四、字节输⼊流
1. 概述
java.io.InputStream: 此抽象类是表⽰字节输⼊流的所有类的超类。读取任意⽂件,每次只读取1个字节
2. 核⼼⽅法
abstract int read():读取⼀个字节
read()⽅法的特点:read() 执⾏⼀次,就会⾃动读取下⼀个字节,返回值是读取到的字节, 读取到结尾返回 -1
public class IoDemo { public static void main(String[] args) throws IOException { //创建字节输⼊流的⼦类对象 FileInputStream fis = new FileInputStream
int read(byte[] b):读取⼀定数量的字节,并将其存储在缓冲区数组 b 中
int read(byte[] b, int off, int len) :读取最多 len 个字节,存⼊ byte 数组。
数组的作⽤:缓冲的作⽤, 提⾼效率
read 返回的 int,表⽰读取到多少个有效的字节数
public class IoDemo { public static void main(String[] args) throws IOException { //创建字节输⼊流的⼦类对象 FileInputStream fis = new FileInputStream
3. FileInputStream 类
(1)构造⽅法
为这个流对象 绑定数据源
FileInputStream(File file)
FileInputStream(String name)
参数:File对象 和 String对象
(2)输⼊流读取⽂件的步骤
创建字节输⼊流的⼦类对象
调⽤读取⽅法 read 读取
关闭资源
(3)读取数据的⽅式:
第⼀种⽅式:⼀次读取⼀个字节数据
第⼆种⽅式:⼀次读取⼀个字节数组
第⼆种⽅式效率更⾼,每次读取都会和操作系统发⽣⼀次交互,第⼆种⽅式每次可以读取多个数据,提⾼了操作效率
4、释放资源的另⼀种⽅式
//1.第⼀种释放资源的⽅式 closeQuietly//释放输⼊流资源closeQuietly(fis);//释放输出流对象closeQuietly(fos);private static void closeQuietly(Closeable close) { if(c
五、字节流⽂件复制
1. 读取单个字节
public class Copy { public static void main(String[] args) { long s = System.currentTimeMillis(); //定义两个流的对象变量 FileInputStream fis = null;
2. 读取字节数组
public class Copy_1 { public static void main(String[] args) { long s = System.currentTimeMillis(); FileInputStream fis = null; FileOutputStream
六、字符输出流
1. 概述
java.io.Writer 所有字符输出流的超类。写⽂件,写 ⽂本⽂件
2. ⽅法介绍
void write(int c):写⼊单个字符
void write(String str) :写⼊字符串
void write(String str, int off, int len):写⼊字符串的某⼀部分
void write(char[] cbuf):写⼊字符数组
abstract void write(char[] cbuf, int off, int len) :写⼊字符数组的某⼀部分
3. FileWriter 类
Writer 类是抽象类,到⼦类对象 FileWriter
构造⽅法:参数也是 File 类型对象 和 String ⽂件名
字符输出流,写数据的时候,必须要运⾏⼀个功能,刷新功能:flush()
public class WriterDemo { public static void main(String[] args) throws IOException{ FileWriter fw = new FileWriter(""); //写1个字符 fw.write(10
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论