本文已参与「新人创作礼」活动,一起开启掘金创作之路
File的目的是为了获取磁盘上文件的信息或在磁盘上创建新的文件夹,但不涉及对文件的读写操作
1.创建File对象的构造方法有三个:
- File(String filename)
- File(String directoryPath,String filename)
- File(File dir,String filename)
其中filename是文件名,directoryPath是文件路径,dir为目录,使用第一个去创建时,文件被认为与当前应用程序在同一目录.
2.文件的属性
经常使用File类的下列方法去获取文件信息
- public String getName()//获取文件名字(下列省略public)
- boolean canRead() //判断文件是否可读
- boolean canWrite() //判断文件是否可被写入
- boolean exists() //判断文件是否存在
- String getAbsolutePath() //获取文件的绝对路径
- String getParent() //获取文件的父目录
- boolean isFile() //判断文件是否是一个普通文件
3.文件的创建和删除
当创建文件时,例如
File file = new File("文件名")
如果当前路径没有和文件名一样的文件,则调用:public boolean createNewFile();去创建文件
而删除文件则直接使用public Boolean delete()方法 如: file.delete()
明白了这些之后 而下面我们就来进行文件的字节输入流的学习
1.创建文件输入流
有两个构造方法:
1.FileInputStream file = new FileInputStream ("hello.txt");
2.File f = new File("hello.txt");
FileInputStream file = new FileInputStream (f );
要注意构造的时候要抛出异常,不过各种编辑器都会有提示的
看个人习惯可以选一个.
2.使用输入流读取文件
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class wenjian_inputstream {
public static void main(String[] args) throws Exception {
//InputStreamReader
char[] a = new char[1024];//设置每次读取的字节
int n ;//设置循环结束符
try {
InputStreamReader isr = new InputStreamReader(new FileInputStream("hello.txt"), "utf-8");
while ((n = isr.read(a)) != -1) {//设置每次读取的字节放到char a[]数组中,直到文件末尾返回-1
String s = new String(a, 0, n);//n不可以写成固定数字,不然读不完整或超出
System.out.println(s);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//FileInputStream
byte[] z = new byte[100];//设置每次读取的字节,不知道为什么设置小于100的报错
try {
FileInputStream file = new FileInputStream("hello.txt");
while ((n = file.read(z, 0, 100)) != -1) {//设置每次读取的字节从中间0开始放到byte z[]数组中,直到文件末尾返回-1
String s = new String(z, 0, n);//n不可以写成固定数字,不然读不完整或超出
System.out.print(s);
}
file.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
其中第一个是用InputStreamReader来进行读取的字节,可以对文件进行转码变成utf-8,而要注意的是char[] a = new char[1024];char【】里面的数字设置为1的时候就会一个一个的进行读取,效果图如下
而设置为1024就会一次性读取1024个字节.
其中第二个是用FileInputStream来进行读取的字节,和第一个大同小异.