何谓IO流

OI流

一、file类

1、定义:File类 文件和目录路径名的抽象表示形式。

2、API中常用的一些方法和构造器:(1)、File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。(2)、File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。3)、File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。4)、boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。  如果文件设置只读,就不可修改;(5)、boolean createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件;(6)、boolean delete() 删除;(7)、boolean exists()   测试此抽象路径名表示的文件或目录是否存在;(8)、File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。9)、String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。 10)、String getName()  返回由此抽象路径名表示的文件或目录的名称。11)、String getParent()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。12)、 File getParentFile()返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。13)、boolean isAbsolute() 测试此抽象路径名是否为绝对路径名。14)、boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录;(15)boolean isFile()测试此抽象路径名表示的文件是否是一个标准文件;(16)、boolean isHidden()测试此抽象路径名指定的文件是否是一个隐藏文件。17)、long lastModified()  返回此抽象路径名表示的文件最后一次被修改的时间。18)、long length()返回由此抽象路径名表示的文件的长度。19)、boolean mkdir()创建此抽象路径名指定的目录。20)、boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。21)、boolean renameTo(File dest)  重新命名此抽象路径名表示的文件。

3、具体的示例:

import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Arrays;

import java.util.Date;

public class FileDemo01 {

public static void main(String[] args) throws IOException {

File(File parent, String child)

          根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

   File(String pathname)

          通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

   File(String parent, String child)

          根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File file1=new File("D:\\AAA");  //"D:/AAA/haha.txt"

System.out.println(file1);

File file2=new File("D://","AAA//hehe.txt");

System.out.println(file2);

File file3=new File(file1,"haha.txt");

System.out.println(file3);

//1.boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。  如果文件设置只读,就不可修改

System.out.println("canWrite():"+file3.canWrite());

//2.boolean setReadOnly()

System.out.println("setReadOnly():"+file3.setReadOnly());

System.out.println("canWrite():"+file3.canWrite());

//3.boolean createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

//如果文件所在路径不存在,报错找不到指定的路径,如果路径都存在创建一个新的文件

System.out.println("createNewFile():"+file2.createNewFile());

//4. boolean delete() 删除

System.out.println("delete():"+file2.delete());

System.out.println("delete():"+file1.delete());

//5.boolean exists()   测试此抽象路径名表示的文件或目录是否存在。

System.out.println("exists():"+file3.exists());

System.out.println("exists():"+file2.exists());

 * 6.File getAbsoluteFile()

          返回此抽象路径名的绝对路径名形式。

 String getAbsolutePath()

          返回此抽象路径名的绝对路径名字符串。

File file4=new File("hengheng.txt");

System.out.println("getAbsoluteFile():"+file4.getAbsoluteFile());

System.out.println("getAbsolutePath():"+file4.getAbsolutePath());

System.out.println(new File("D:").getTotalSpace());

System.out.println(new File("D:").getFreeSpace());

//7.String getName()  返回由此抽象路径名表示的文件或目录的名称。

System.out.println("getName():"+file3.getName());

System.out.println("getName():"+file1.getName());

 * 8.String getParent()

          返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。

   File getParentFile()

          返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。

System.out.println("getParent():"+file3.getParent());

System.out.println("getParentFile():"+file1.getParentFile());

//9.boolean isAbsolute() 测试此抽象路径名是否为绝对路径名。

System.out.println("isAbsolute():"+file3.isAbsolute());

System.out.println("isAbsolute():"+file4.isAbsolute());

 * 10.boolean isDirectory()

          测试此抽象路径名表示的文件是否是一个目录。

  boolean isFile()

          测试此抽象路径名表示的文件是否是一个标准文件。

  boolean isHidden()

          测试此抽象路径名指定的文件是否是一个隐藏文件。

System.out.println("isDirectory():"+file1.isDirectory());

System.out.println("isFile():"+file1.isFile());

//11.long lastModified()  返回此抽象路径名表示的文件最后一次被修改的时间。

System.out.println("lastModified():"+new SimpleDateFormat().format(new Date(new File("D:/test.txt").lastModified())));

//12.long length()  返回由此抽象路径名表示的文件的长度。

System.out.println("length():"+file3.length());

 * 12.String[] list()

    File[] listFiles()

String[] strs=file1.list();

System.out.println(Arrays.toString(strs));

System.out.println(Arrays.toString(file1.listFiles()));

 * 13.boolean mkdir()

          创建此抽象路径名指定的目录。

  boolean mkdirs()

          创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

File file6=new File("D:/DDD/EEE");

File file7=new File("D:/CCCCC");

File file8=new File("E:/CCCCC");

System.out.println("mkdir():"+file6.mkdir());

System.out.println("mkdir():"+file6.mkdirs());

//boolean renameTo(File dest)  重新命名此抽象路径名表示的文件。

System.out.println("renameTo():"+file7.renameTo(file8));;

}

}

二、IO流

1.特点:IO:目的:读写文件中的内容 :一连串流动的数据,先进先出的方式传输信息,管道 数据源    目的地-->以程序为中心划分读入写出

流的分类:按照流向分:输入流,输出流;按操作单元分:字节流,字符流;按功能分:节点流,功能流

分类之间是相符想成的,互不冲突

字节流:是万能的 *****  功能:节点流  

 nputStream 字节输入流  此抽象类是表示字节输入流的所有类的超类。

FileInputStream 从文件系统中的某个文件中获得输入字节。

OutputStream 字节输出流

2、示例:

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

public class IODemo02 {

public static void main(String[] args) throws IOException {

//FileInputStream(File file)

//1.建立联系

File file=new File("D:/AAA/haha.txt");

//2.选择流

InputStream is=new FileInputStream(file);

//3.读入

//每次读取一个字节数据,如果已达到末尾返回-1

int num=is.read();

//4.处理数据

System.out.println((char)num);

System.out.println((char)(is.read()));

System.out.println((char)(is.read()));

System.out.println((char)(is.read()));

System.out.println((char)(is.read()));

System.out.println((char)(is.read()));

System.out.println(is.read());  //-1

//5.关闭

is.close();

}

}

3、注意要点:注意导包(鼠标放在相应单词上点击就可以了),明确输出和输入,流用完之后一定要关闭

4、文件拷贝:(1)、注意要点:数据源 程序 目的地。关闭流:先打开的后关闭,后打开的先关闭。

2)、示例:

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class CopyFile06 {

public static void main(String[] args) {

//1.建立联系

File src=new File("D:/test.txt");

File dest=new File("E:/test.txt");

//2.选择流

InputStream is=null;

OutputStream out=null;

try {

is=new FileInputStream(src);

out=new FileOutputStream(dest);

//3.操作

byte[] car=new byte[1024];

int len=-1;

while((len=is.read(car))!=-1){

out.write(car, 0, len);

}

//4.刷出

out.flush();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally{

//5.关闭

if(out!=null){

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if(is!=null){

try {

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

3)、注意事项:建立流是一多态的方式来建立的;区分清楚数据源和目的地。

5、字符流 :只能读写纯文本内容      功能分:节点流 Reader 字符输入流  FileReader 文件字符输入流;Writer 字符输出流   FileWriter

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Reader;

import java.io.Writer;

public class CharDemo01 {

public static void main(String[] args) throws IOException {

//1.选择流

Reader read=new FileReader("D:/test.txt");

Writer write=new FileWriter("E:/hehe.txt");

//2.读取

char[] car=new char[1024];

int len;

/*int num=read.read();

System.out.println((char)num);

System.out.println((char)read.read());*/

while((len=read.read(car))!=-1){

write.write(car, 0, len);

}

//3.刷出

write.flush();

//3.关闭

write.close();

read.close();

}

}

6、字符缓冲流  不能发生多态,因为存在新增方法。BufferedReader 字符输入缓冲流,新增方法readLine() 读取一行BufferedWriter 字符输出缓冲流,新增方法  newLine() 写出换行符

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Reader;

import java.io.Writer;

public class BufferedDemo02 {

public static void main(String[] args) throws IOException {

//1.选择流

BufferedReader read=new BufferedReader(new FileReader("D:/test.txt"));

BufferedWriter write=new BufferedWriter(new FileWriter("E:/hehe.txt"));

//2.读取

// String str=read.readLine();

String s=null;

while((s=read.readLine())!=null){

write.write(s);

write.newLine();

}

//3.刷出

write.flush();

//4.关闭

write.close();

read.close();

}

猜你喜欢

转载自www.cnblogs.com/ruanjianwei/p/11781164.html