File类与IO流

学习目标:
1.   File类
2 .  IO流的基本原理
3.   IO流的分类

4.  文件字节流与文件字符流

一:File类

java.io.File类代表系统文件(文件和目录)。
访问文件属性步骤
1 创建文件对象:File file = new File( String pathname );

"c:\\test .txt"或"c:/test .txt"

2 调用方法:操作文件或目录的属性(路径、权限、日期和时间等 )

File类的属性:separator 默认名称分隔符在 UNIX 系统上,此字段的值为 '/';在 Windows 系统上,它为 '\\'
为了程序的跨平台特性,文件的路径应该用这个属性值来代表。

File类的常用方法:

方法名称

说      明

boolean exists( )

判断文件或目录是否存在

boolean isFile( )

判断是否是文件

boolean isDirectory( )

判断是否是目录

String getName( )

返回此对象表示的文件或目录的名称

String getPath( )

返回此对象表示的文件的相对路径名

String getAbsolutePath( )

返回此对象表示的文件的绝对路径名

boolean delete( )

删除此对象指定的文件或目录

boolean createNewFile( )

创建名称的空文件,不创建文件夹

long  length()

返回文件的长度,单位为字节如果文件不存在,则返回 0L

boolean mkdir() 

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

boolean mkdirs()

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

String[]  list() 

返回此目录中的文件名和目录名的数组

File[]  listFiles() 

返回此目录中的文件和目录的File实例数组

eg:

package file;


import java.io.File;
import java.io.IOException;


public class FileDemo {


public static void main(String[] args) {
File f=new File("d:"+File.separator+"text.txt");
if(f.exists()){//判断文件目录是否存在
f.delete();
System.out.println("文件已删除");
}else{
try {
f.createNewFile();
System.out.println("创建成功");
} catch (IOException e) {

e.printStackTrace();
}
}
}
}

eg2:

package file;


import java.io.File;


public class DirDemo {


public static void main(String[] args) {
File f=new File("c:"+File.separator+"text1"+File.separator+"text2"+File.separator+"text3");
//boolean flag=f.mkdir();
//System.out.println(flag?"目录创建成功":"创建失败");
boolean flag1=f.mkdirs();   //如果目录已经存在,则创建失败
System.out.println(flag1?"目录创建成功":"创建失败");
System.out.println(f.getPath());//获取路径
System.out.println(f.getParentFile());//获取父目录
}
}

eg3:

package file;


import java.io.File;


public class ListFilesDemo {


public static void main(String[] args) {
File f=new File("d:"+File.separator);
File[] files=f.listFiles();//返回正在遍历的目录的文件
System.out.println(files.length);
for(File file:files){
System.out.println(file);
}
}
}

递归遍历文件夹

eg4:

package file;


import java.io.File;


public class ShowAllFile {


public static void main(String[] args) {
File f=new File("d:"+File.separator);
showAllFiles(f);
}
public static void showAllFiles(File f){
if(f!=null){
if(f.isDirectory()){   // 是否为目录
File[] files=f.listFiles();   // 返回当前正在遍历的目录中的文件和目录的File实例数组
                if(files!=null){
                for(File file:files){
                showAllFiles(file);
                }
                }
}else{
System.out.println(f.getPath());
}
}
}
}

二:IO流的基本原理

数据流(Stream)是指数据通信的通道。
java程序中对数据的输入、输出操作是以“流”方式进行的。JDK中提供了各式的“流”类来获取不同种类的数据。

三: IO流的分类

按流向分:
输入流:程序从数据源读取数据的流
输出流:程序向数据源写入数据的流
按数据传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
按功能分:
节点流:用于直接操作目标设备的流
处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大、灵活的读写功能。

JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类


字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Writer

InputStream:  read(xx)读取字节系列方法
OutputStream: write(xx) 写入字节系列方法
Reader:  read(xx)读取字符系列方法
Writer:write(xx)写入字符系列方法

文件字节流:  FileInputStream和FileOutputStream
文件字符流:  用FileReader和FileWriter

2.FileInputStream类

构造方法
FileInputStream(File file)
FileInputStream(String name)

eg: 

package stream;
import java.io.*;
public class CopyImage {
public static void main(String[] args) {
File srcFile=new File("d:"+File.separator+"image"+File.separator+"1014.jpg");
File destFile1=new File("d:"+File.separator+srcFile.getName());
copy(srcFile,destFile1);
}
public static void copy(File src, File dest) {
InputStream input=null;
OutputStream out=null;
try{
input=new FileInputStream(src);//读取源文件的流
out=new FileOutputStream(dest);//写入目标文件的流
byte[] b=new byte[1024];//自定义缓冲区
int len=0;
while((len=input.read(b))!=-1){
out.write(b,0,len);
}
System.out.println("复制完毕");
}catch(Exception e){
e.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

eg2:

package stream;
import java.io.*;
public class FileInputStreamDemo {


private static byte data;


public static void main(String[] args) {
File f=new File("c:"+File.separator+"text.txt");
InputStream input=null;
try {
input=new FileInputStream(f);
/*
* 每次读取一个字节数据
* int date=0;
* while((date=input.read())!=-1{
* byte b=(byte)data;
* byte[] array=new byte[1];
* array[0]=b;
* String str=new String(array);
* System.out.print(str);
* }**/
byte[] b=new byte[1024];//自定义缓冲区
int len=input.read(b);//读取到byte[]数组中,返回读入到byte【】数组中的字节数
System.out.println("读取的内容是"+new String(b,0,len));//len  最多装len长度的字节
} catch (Exception e) {
e.printStackTrace();

}finally{
try {
input.close();//关闭流,流很费资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

3.FileOutputStream类:

构造方法
FileOutputStream (File file)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)

1、前两种构造方法在向文件写数据时将覆盖文件中原有的内容

2、创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

eg:

package stream;
import java.io.*;
public class FileOutputStreamDemo {
public static void main(String[] args) {
File f=new File("c:"+File.separator+"text1.txt");
OutputStream out=null;
try {
out=new FileOutputStream(f,true);//true开启追加模式,不停重复写入XX
out.write("XX".getBytes());//直接写入一个字节数
String data="大唐盛世";
byte[] b=data.getBytes();
out.write(b,0,2);//写入2个字节,使用三参的write(XXX)方法写入
out.write(data.getBytes());
System.out.println(f.length());
System.out.println("写入成功!");
} catch (Exception e) {

e.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

4.FileReader类

构造方法
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新FileReader 
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。

eg:

package stream;
/*
 * java.io.Reader是所有字符输入流的父亲,该类定义了以字符为单位读取数据的基本方法,倘若输入流当前没有数据,则返回-1,出现错误则抛出IOException
 */
import java.io.*;
public class FileReaderStreamDemo {


public static void main(String[] args) {
Reader r=null;
try {
r=new FileReader("c:"+File.separator+"test.txt");
int data=r.read();//读取一个字符
char c=(char)data;//转换成字符
System.out.println("第一次读取"+c);
char[] a=new char[1024];
int len =r.read(a);// 读取数据放入缓冲区中,返回存入缓冲区中的字符个数
System.out.println("第二次读取"+new String(a,0,len));
} catch (Exception e) {

e.printStackTrace();
}finally{
try {
r.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

5.FileWriter类

FileWriter(File file) 
根据给定的 File 对象构造一个 FileWriter 对
FileWriter(File file, boolean append) 
根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(String fileName) 
根据给定的文件名构造一个 FileWriter 对象。 
FileWriter(String fileName, boolean append)
根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

eg:

package stream;
import java.io.*;
public class FileWriterDemo {


public static void main(String[] args) {
Writer w=null;
try {
w=new FileWriter("c:"+File.separator+"test.txt");
w.write("你好,Java".toCharArray());   // 写入字符数组
w.write("XXXXX");   // 写入字符串
w.write('a');   // 写入单个字符
w.flush();   // 将缓冲区中的写入内容,刷到磁盘上
System.out.println("写入成功!");
} catch (IOException e) {

e.printStackTrace();
}finally{
try {
w.close();
} catch (IOException e) {

e.printStackTrace();
}
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值