IO流
-
主要内容
-
java.io.File类的使用(File:计算机操作系统中的文件和文件夹)
-
File类
java.io.Filelei:文件和目录路径名的抽象表示形式,与平台无关
File能新建、删除、重命名文件和目录,但File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
File对象可以作为参数传递给流的构造函数
File类的常见构造方法:
public File(String pathname)
- 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储.
public File(String parent,String child)
- 以parent为父路径,child为子路径创建File对象.
- File的静态属性String separator存储了当前系统的路径分隔符.
- 在UNIX中,此字段为’/’,在Windows中,为’\\'
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
File f = new File("D:\\桌面\\java\\test\\tt.txt");
File f2 = new File("D:\\桌面\\java\\test");
System.out.println(f.getName());
System.out.println(f2.getName());
System.out.println(f.getPath());
File f5 = new File("java daima\\src\\OOP\\IO\\FileDemo.Java");
System.out.println(f5.getAbsolutePath());
System.out.println(f5.getPath());
System.out.println(f5);
System.out.println(f5.getAbsoluteFile());
System.out.println(f.getParent());
File file = new File("D:\\桌面\\java\\test\\hh.txt");
f.renameTo(file);
System.out.println(file.exists());
System.out.println(file.canRead());
System.out.println(file.canWrite());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
System.out.println(file.lastModified());
System.out.println(file.length());
File file1 = new File("D:\\桌面\\java\\test\\zz.txt");
File file2 = new File("D:\\桌面\\java\\test\\hzc");
if (!file2.exists()) {
file2.mkdir();
}
file2.delete();
File file3 = new File("D:\\桌面\\java\\test\\hzc\\13\\22");
if (!file3.exists()) {
file3.mkdirs();
}
System.out.println("==========");
String[] s = file2.list();
for (String x:s) {
System.out.println(x);
}
File[] a = file2.listFiles();
for (File x:a
) {
System.out.println(x);
}
}
}
输出某一个路径所有的目录与文件全部遍历出来,不论层级有多深,要全部遍历出来
import java.io.File;
public class FileTest {
public static void main(String[] args) {
File file = new File("D:\\桌面\\java\\test");
new FileTest().test(file);
}
public void test(File file){
if (file.isFile() ) {
System.out.println(file.getAbsolutePath()+"是文件");
}else{
System.out.println(file.getAbsolutePath()+"是文件夹");
File[] file1 = file.listFiles();
if (file1 != null && file1.length>0) {
for (File x:file1) {
test(x);
}
}
}
}
}
-
IO原理及流的分类
-
Java IO原理
- IO流用来处理设备之间的数据传输
- Java程序中,对于数据的输入/输出操作以"流(stream)"的方式进行.
- Java.IO包提供了各种"流"类和接口,用以获取不同种类的数据,并提供标准的方法输入或输出数据
输入input
:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。输出output
:将程序(内存)数据输出到磁盘、光盘等存储设备中
-
流的分类
- 按操作
数据单位
不同分为:字节流(8 bit)
,字符流(16 bit)
- 按数据流的
流向
不同分为:输入流,输出流
- 按流的
角色
的不同分为:节点流
,处理流
- 1.字节流:可以读取一切文件
- **2.读取
纯文本文件
比较方便,已经帮助我们处理了乱码问题 **
- Java的IO流共涉及40多个类,实际上非常规则,都是从如下4个抽象基类派生的.由这四个类派生出来的子类名称都是以其父类名作为子类名后缀.
-
文件流
- FileInputStream / FileOutputStream / FileReader / FileWriter-
- 字节输入流(FileInputStream )
import java.io.File;
import java.io.FileInputStream;
public class FileInputStreamDemo {
public static void main(String[] args) {
try {
File file = new File("D:\\桌面\\java\\test\\hh.txt");
if (file.exists() && file.length()>0 ) {
FileInputStream fileInputStream = new FileInputStream(file);
int ch = 0;
byte[] shu = new byte[10];
while((ch=fileInputStream.read(shu))!=-1){
System.out.print(new String(shu,0,ch));
}
fileInputStream.close();
}
} catch (Exception e) {
System.out.println("文件找不到");
}
}
}
import java.io.FileOutputStream;
public class FileOutputStreamDemo {
public static void main(String[] args) {
try {
String data = "hello world java";
FileOutputStream fis = new FileOutputStream("D:\\桌面\\java\\test\\hzc.txt",false);
byte[] bytes= data.getBytes();
fis.write(bytes);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
通过代码把一个文件里面的信息写入到新的文件里面
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class IODemo {
public static void main(String[] args) {
try {
long startTime = System.currentTimeMillis();
System.out.println(startTime);
File file = new File("D:\\桌面\\java\\test\\hh.txt");
if (file.exists() && file.length()>0) {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream("D:\\桌面\\java\\test\\hzc.txt");
int ch = 0;
while((ch=fis.read())!=-1){
fos.write(ch);
}
fis.close();
fos.close();
long endTime = System.currentTimeMillis();
System.out.println(endTime);
}
} catch (Exception e) {
System.out.println("文件不存在");
}
}
}
-
缓冲流
- BufferedInputStream / BufferedOutputStream / BufferedReader / BufferedWriter
-
BufferedInputStream
- 缓冲流输入的使用
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
public class BufferedInputStreamDemo {
public static void main(String[] args) {
try {
long staryTime = System.currentTimeMillis();
InputStream file = new FileInputStream("D:\\桌面\\java\\test\\hh.txt");
BufferedInputStream bu = new BufferedInputStream(file);
byte[] cha= new byte[1024];
int len = 0;
while((len=bu.read(cha))!=-1){
System.out.println(len);
}
bu.close();
long endTime = System.currentTimeMillis();
System.out.println("共消耗"+(endTime-staryTime)+"ms");
} catch (Exception e) {
e.printStackTrace();
}
}
}
package OOP.IO;
import java.io.*;
public class BufferedOutputStreamDemo {
public static void main(String[] args) {
try {
long statTime = System.currentTimeMillis();
File file1 = new File("D:\\桌面\\java\\test\\hh.txt");
if (file1.exists() && file1.length()>0) {
InputStream file = new FileInputStream("D:\\桌面\\java\\test\\hh.txt");
BufferedInputStream bu = new BufferedInputStream(file);
OutputStream fileOut = new FileOutputStream("D:\\桌面\\java\\test\\hyx.txt");
BufferedOutputStream buff = new BufferedOutputStream(fileOut);
byte[] cha = new byte[1024];
int lea = 0;
while ((lea = bu.read(cha)) != -1) {
buff.write(cha,0,lea);
}
bu.close();
buff.close();
long endTime = System.currentTimeMillis();
System.out.println("一共"+(endTime-statTime)+"ms");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
-
转换流
- InputStreamReader / OutputStreamWriter
-
标准输入/输出流
-
打印流
- PrintStream / PrintWriter
-
数据流
- DataInputStream / DataOutputStream
-
对象流 —涉及序列化、反序列化
- ObjectInputStream / ObjectOutputStream
-
随机存取文件流(随意存取文件流)
-
字符流 Reader/Writer
-
文件字符输入流(FileReader)
import java.io.FileReader;
public class FileReaderDemo {
public static void main(String[] args) {
try {
long startTime = System.currentTimeMillis();
FileReader fileReader = new FileReader("D:\\桌面\\java\\test\\hh.txt");
char[] car= new char[1024];
int a = 0;
while((a=fileReader.read(car))!=-1){
System.out.println(a);
System.out.print(new String(car,0,a));
}
System.out.println(" ");
long endTime = System.currentTimeMillis();
System.out.println("一共"+(endTime-startTime)+"ms");
fileReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
-
缓冲字符输入流(BufferedReader)
-
文件字符输chu流(FileWriter)
-
缓冲字符输出流(BufferedWriter)