目录
一.File类
Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。
1.1构造方法:
- 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。
File(File parent, String child);
- 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。
File(String pathname)
- 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(String parent, String child)
- 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。
File(URI uri)
1.2主要方法
方法 | 描述 |
String getName() | 获取文件的名称 |
boolean canRead() | 判断文件是否是可读的 |
boolean canWrite() | 品判断文件是否可被写入 |
boolean exits() | 判断文件长度是否存在 |
int length() | 获取文件的长度(以字节为单位) |
String getAbsolutePath() | 获取文件的绝对路径 |
String getParent() | 获取文件的父路径 |
boolean isFile() | 判断此抽象路径名表示的文件是否为普通文件 |
boolean isDirectory() | 判断此抽象路径名表示的是否是一个目录 |
boolean isHidden | 判断文件是否是隐藏文件 |
long lastModified() | 获取文件最后修改时间 |
Boolean canExecute() | 测试应用程序是否可以执行此抽象路径名表示的文件。 |
boolean createNewFile() | 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 |
boolean delete() | 删除由此抽象路径名表示的文件或目录。 |
File[] listFiles() | 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。 |
String[] list() | 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 |
boolean mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。可创建多层文件包 |
boolean mkdir() | 创建由此抽象路径名命名的目录。只能创建一层文件包 |
public class FileDemo {
public static void main(String[] args) throws IOException {
String parth ="F:\\Filetest\\File0044\\File003"; //新建文件夹
File file =new File(parth);
if(file.exists()){//文件是否存在
System.out.println("文件存在目录:"+file.getPath());
file.getName();//文件名
file.getPath();//父目录
file.delete();//删除文件
System.out.println("文件已删除");
}else{
//被这个抽象路径名创建目录。(不能创建父目录)
file.mkdir();
// 由这个抽象路径名创建目录命名,包括任何必要的但不存在的父目录。(能创建父目录)
file.mkdirs();
}
}
}
二.IO
2.1常用的io流
IO流分为字节流和字符流
简单的理解字节流就是byte类型的流,可以直接处理byte类型,要处理String类型字符创,先要转化为byte类型才能进行处理
字符流简单理解就是可以直接处理字符串的流。
2.2Java IO流体系中常用的流分类
Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义)
注:下表中带下划线的是抽象类,不能创建对象。粗体部分是节点流,其他就是常用的处理流。
流分类 | 使用分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
| 抽象基类 | InputStream | OutputStream | Reader | Writer |
节点流 | 访问文件 | FileInputStream | FileOutStream | FileReader | FileWriter |
访问数值 | ByteArrayInputStream | ByteArrayOutStream | CharArrayReader | CharArrayWriter | |
访问管道 | PipedInputStream | PipedOutStream | PipedReader | PipedWriter | |
访问字符串 |
|
| StringReader | StringWriter | |
处理流 | 缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
转换流 |
|
| InputStreamReader | OutputStreamWriter | |
对象流 | ObjectInputStream | ObjectOutputStream |
|
| |
抽象基类(过滤) | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter | |
打印流 |
| PrintStream |
| PrintWriter | |
推回输入流 | PushbackInputStream |
| PushbackReader |
| |
特殊流 | DataInputStream | DataOutputStream |
|
|
2.3总结
1.Java IO是采用的是装饰模式,即采用处理流来包装节点流的方式,来达到代码通用性。
2.处理流和节点流的区分方法,节点流在新建时需要一个数据源(文件、网络)作为参数,而处理流需要一个节点流作为参数。
3.处理流的作用就是提高代码通用性,编写代码的便捷性,提高性能。
4.节点流都是对应抽象基类的实现类,它们都实现了抽象基类的基础读写方法。其中read()方法如果返回-1,代表已经读到数据源末尾。
5转换流:实现了节流和字符流相互
OutputStreamWriter outputStreamWriter =new OutputStreamWriter(
new BufferedOutputStream(
new FileOutputStream(file)));
outputStreamWriter.write("输出是字符");
public class IoDemo {
public static void main(String[] args) throws IOException {
//从文件中读区数据
InputStream in = new FileInputStream(
"C:\\Users\\Administrator\\Desktop\\学习路线\\并发.txt");
byte bytes[] = new byte[200];
StringBuffer buffer =new StringBuffer();
while (in.read(bytes)!=-1){//循环取出数据每次从0读取到1024
//转换成字符串
String str=new String(bytes,"GBK");//把byte类型的数据转化为String的UTF-8类型方便输出
buffer.append(str);
System.out.println(str);
}
in.close();
//写入文件
String parth ="F:\\Filetest\\File\\File001\\"; //新建文件夹
File file =new File(parth);
if(file.exists()){//
System.out.println("文件存在目录:"+file.getPath());
}else{file.mkdirs();}
//(缓存字节流)使用方式和字节流差不多,但是效率更高(推荐使用) true表示文件可追加
OutputStream Out =new BufferedOutputStream(
new FileOutputStream(parth+"aa.txt",true));
//字节流
FileOutputStream fileOutputStream = new FileOutputStream(parth+"aa.txt",true);
Out.write(buffer.toString().getBytes());
Out.close();
//显示文件大小
File f =new File(parth+"aa.txt");
System.out.println(f.length());
System.out.println("写入成功");
}
}