IO流就是数据进行传输的管道
传输 :
-
输入流(把数据传到程序中)-->上传
-
输出流(把数据从程序中输出)-->下载
文件类(File)概述 :
File类 : 文件和目录路径名的抽象表现形式;
-
在计算机中所有的数据都是以文件的格式储存;
-
Java中认为文件是一个对象;
File类的四种构造方法 :
/*第一种
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。*/
File file = new File("D:\\a\\b.txt");
/*第二种
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。*/
File file1 = new File("D:\\a", "b.txt");
/*第三种
File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。*/
File fileParent = new File("D:\\a");
File file2 = new File(fileParent, "b.txt");
/*第四种
File(URI uri)
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。*/
创建功能 :
- createNewFile() :
* 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件;
* 若已存在则不会创建;
* 如果没指明创建文件的路径,那么文件是在项目路径下创建;
* 如果路径不存在则不能创建;
* 同一个项目下若创建一个无后缀名的文件不能与项目中文件夹同名
File file = new File("D:\\a\\b.txt");
/*createNewFile()
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。*/
boolean newFile = file.createNewFile();
System.out.println(newFile);//true
/*如果没指明创建文件的路径,那么文件是在项目路径下创建*/
File file1 = new File("dd.txt");
boolean newFile1 = file1.createNewFile();
System.out.println(newFile1);//true
/*如果路径不存在则不能创建*/
File file2 = new File("D:\\aaa\\b.txt");
boolean newFile2 = file1.createNewFile();
System.out.println(newFile2);//false
- mkdir() :
* 创建此抽象路径名指定的目录;
* 创建一个文件夹,但该方法不能创建多层文件夹;
File file = new File("D:\\a\\aaa");
boolean mkdir = file.mkdir();
System.out.println(mkdir);//true
File file1 = new File("D:\\a\\bbbb\\aaaa");
boolean mkdir1 = file1.mkdir();
System.out.println(mkdir1);//false
- mkdirs() :
* 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录;
* 创建多层文件夹;
File file1 = new File("D:\\a\\bbbb\\aaaa");
boolean mkdirs = file1.mkdirs();
System.out.println(mkdirs);//true
- delete() :
* 删除此抽象路径名表示的文件或目录;
* 若删除文件夹里还有文件夹或文件,则删除失败;
File file2 = new File("D:\\a\\aaa");
boolean delete = file2.delete();
System.out.println("delete = " + delete);//false
File file4 = new File("D:\\a\\ccc");
boolean delete2 = file4.delete();
System.out.println("delete2 = " + delete2);//false
File file3 = new File("D:\\a\\aaa\\aaaa");
boolean delete1 = file3.delete();
System.out.println("delete1 = " + delete1);//true
File file5 = new File("D:\\a\\ccc\\b.txt");
boolean delete3 = file5.delete();
System.out.println("delete3 = " + delete3);//true
- renameTo(File dest) :
* 重新命名此抽象路径名表示的文件。
* 同路径下操作为改名;
* 不同路径下操作为剪切;
File file = new File("D:\\a\\aa.txt");
System.out.println("file = " + file);//file = D:\a\aa.txt
File fileRename = new File("D:\\a\\aa");
boolean aa = file.renameTo(fileRename);
System.out.println("aa = " + aa);//true
File file1 = new File("D:\\a\\aa\\aaaa\\a.txt");
boolean b = file1.renameTo(new File("D:\\a\\b.txt"));
System.out.println("b = " + b);//true
- isDirectory
* 判断是否是目录 - isFile
* 判断是否是文件 - exists
* 判断是否存在 - canRead
* 判断是否可读 - canWrite
* 判断是否可写 - isHidden
* 判断是否隐藏
boolean result = file.isDirectory();//判断是否是目录
System.out.println(result);//true
result = file1.isDirectory();
System.out.println(result);//false
result = file.isFile();//判断是否是文件
System.out.println(result);//false
result = file1.isFile();
System.out.println(result);//true
result = file.exists();//判断是否存在
System.out.println(result);
result = file1.exists();
System.out.println(result);
result = file.canRead();//判断是否可读
System.out.println(result);
result = file1.canRead();
System.out.println(result);
result = file.canWrite();//判断是否可写
System.out.println(result);
result = file1.canWrite();
System.out.println(result);
result = file.isHidden();//判断是否隐藏
System.out.println(result);
result = file1.isHidden();
System.out.println(result);
- getAbsolutePath() :
* 获取绝对路径; - getPath() :
* 获取相对路径; - getName() :
* 获取文件名; - length() :
* 获取长度; - lastModified() :
* 获取最后修改时间; - file() :
* 获取指定目录下所有文件或者文件夹的名称数组; - listFiles() :
* 获取指定目录下所有文件或者文件夹的File数组;
IO流的分类 :
流向分 : (不管是输入流还是输出流都是相对于你当前的程序而言)
-
> 输入流 (读read) input
-
> 输出流 (读write) output
传输的内容分 :
-
>字节数据 : 图片 , 音频 , 视频 * 字节输入流(InputStream) * 字节输出流(OutputStream)
-
>字符数据 * 字符输入流(Readr) * 字符输出流(Writer)
ps : 不管是字节流还是字符流,底层流动都是字节;outputStream
OutputStream的子类 :
- FileOutputStream(File file)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 - FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
//创建管道,创建流对象
FileOutputStream fos = new FileOutputStream("a.txt");
String data = "Hello World";
//把字符数据转换成字节数据
byte[] bytes = data.getBytes();
//通过管道把数据写入文件中
fos.write(bytes);
//关闭管道
fos.close();
缓冲符输入流与带符号输入流演示 :
周杰伦
周润发
刘德华
郭富城
黎明
BufferedReader br = new BufferedReader(new FileReader("names.txt"));
LineNumberReader lineNumberReader = new LineNumberReader(new FileReader("names.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
while ((line = lineNumberReader.readLine()) != null) {
System.out.println(lineNumberReader.getLineNumber()+":"+line);
}
br.close();
lineNumberReader.close();
结果 :
周杰伦
周润发
刘德华
郭富城
黎明
1:周杰伦
2:周润发
3:刘德华
4:郭富城
5:黎明
数据输入输出流 :
-
DataInputStream
* 可以以适当的形式把数据读到程序中;
* 数据 : 8种基本类型,字符串类型; -
DataOutputStream
* 可以以适当的形式把数据写入流中;
* 数据 : 8种基本类型,字符串类型; -
注意 : 怎么写进去就怎么读出来,顺序不能乱
-
应用场景 : 网络编程
* 客户端(write)–服务端(read)
数据输入输出流是基本输入输出字节流的子类(InputStream/OutputStream)
数据输出流允许应用程序以适当方式将数据写入输出流中,然后应用程序可以使用数据输入流将数据读入
DataOutputStream dos = new DataOutputStream(new FileOutputStream("dos.txt"));
dos.writeByte(100);
dos.writeShort(101);
dos.writeChar(102);
dos.writeInt(103);
dos.writeLong(104);
dos.writeFloat(105.5f);
dos.writeDouble(106.6);
dos.writeBoolean(true);
dos.writeUTF("HELLO");
dos.close();
byte b1 = dis.readByte();
short i = dis.readShort();
char c = dis.readChar();
int i1 = dis.readInt();
long l = dis.readLong();
float v = dis.readFloat();
double v1 = dis.readDouble();
boolean b = dis.readBoolean();
String s = dis.readUTF();
System.out.println(b1);
System.out.println(i);
System.out.println(c);
System.out.println(i1);
System.out.println(l);
System.out.println(v);
System.out.println(v1);
System.out.println(b);
System.out.println(s);
dis.close();
打印流 :
打印流分字节打印流(PrintStream)和字符打印流(PrintWriter),打印流只有输出流(因为是打印),没有输入流
字节打印流继承基本的字节流OutputStream
字符打印流继承基本的字符流Writer
打印流的特殊功能 :
- 可以打印说有的数据(基本类型+引用类型) 引用类型 : 该类型对象toString方法的内容;
- 可以自动刷新;
/*PrintWriter pw = new PrintWriter("pw.txt");*/
//开启自动刷新
//方法一
PrintWriter pw = new PrintWriter(new FileWriter("pw.txt"),true);
//方法二
/*PrintWriter pw = new PrintWriter(new FileOutputStream("pw.txt"),true);*/
pw.println(true);
pw.println(1);
pw.println('a');
pw.println("hahaha");