JAVA文件操作

JAVA文件操作

java.io包也是Java内置的包,其中包含一系列对文件和目录的属性进行操作,对文件进行读写操作的类;
程序中如果要使用到该包中的类,对文件或流进行操作,则必须显式地声明如下语句:
import java.io.*;
什么是文件?
文件可以认为是相关记录或存放在一起的数据的集合;
文件一般是存放在磁盘上的,例如:硬盘、软盘和光盘等等。
File类的对象不但可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录;
当创建一个文件对象后,就可以利用它来对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等等;
需要注意的是,File对象并不能直接对文件进行读/写操作,只能查看文件的属性;
File类的构造方法有4种重载方式,常用的如下:

构造方法说明
File(String pathname)指定文件(或目录)名和路径创建文件对象

如:

import java.io.File;

public class note {
    public static void main(String[] args) {
        //在当前目录下创建一个与aaa.txt文件名相关联的文件对象
        File f1 = new File("note.txt");
        //指明详细的路径以及文件名,请注意双斜线
        File f2 = new File("D:\\Java\\Hello.java");

    }
}

File类中的常用方法

boolean exists()判断文件是否存在,存在返回true,否则返回false
boolean isFile()判断是否为文件,是文件返回true,否则返回false
boolean isDirectory()判断是否为目录,是目录返回true,否则返回false
String getName()获得文件的名称
String getAbsolutePath()获得文件的绝对路径
long length()获得文件的长度(字节数)
boolean createNewFile() throws IOException创建新文件,创建成功返回true,否则返回false,有可能抛出IOException异常,必须捕捉
boolean delete()删除文件,删除成功返回true,否则返回false
File[] listFiles()返回文件夹内的子文件与子文件夹的数组
//显示与文件有关的属性信息
        System.out.println("文件或目录是否存在:" + file.exists());
        System.out.println("是文件吗:" + file.isFile());
        System.out.println("是目录吗:" + file.isDirectory());
        System.out.println("名称:" + file.getName());
        System.out.println("绝对路径:" + file.getAbsolutePath());
        System.out.println("文件大小:" + file.length());

流是指一连串流动的数据信号,是以先进先出的方式发送和接收数据的通道。
根据流动方向的不同,流分为输入流和输出流;
对于输入和输出流,由于传输格式的不同,又分为字节流和字符流:
字节流是指8位的通用字节流,以字节为基本单位,在java.io包中,对于字节流进行操作的类大部分继承于InputStream(输入字节流)类和OutputStream(输出字节流)类;
字符流是指16位的Unicode字符流,以字符(两个字节)为基本单位,非常适合处理字符串和文本,对于字符流进行操作的类大部分继承于Reader(读取流)类和Writer(写入流)类。

**

FileInputStream类

称为文件输入流,继承于InputStream类,是进行文件读操作的最基本类;
作用是将文件中的数据输入到内存中,我们可以利用它来读文件;
由于它属于字节流,因此在读取Unicode字符(如中文)的文件时可能会出现问题。

FileInputStream对象读文件方式1

public class FileInputStreamDemo1 {
  public static void main(String[] args) {
    try {
      File file = new File("test.txt");  //创建文件对象
      //使用文件对象创建文件输入流对象,相当于打开文件
      FileInputStream fis = new FileInputStream(file);
      for (int i = 0; i < file.length(); i++) {
        char ch = (char)(fis.read());  //循环读取字符
        System.out.print(ch);
      }
      System.out.println();
      fis.close();     //关闭流
    } catch (FileNotFoundException fnfe) {
      System.out.println("文件打开失败。");
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
  }
}

FileInputStream对象读文件方式2:

public class FileInputStreamDemo2 {
  public static void main(String[] args) {
    try {
      File file = new File("test.txt");  //创建文件对象
      FileInputStream fis = new FileInputStream(file);
      //根据文件的字节长度创建字节数组
      byte[] buf = new byte[(int)(file.length())];
      fis.read(buf);  //读取文件中的数据存放到字节数组中
      String str = new String(buf);  //利用字节数组创建字符串
      System.out.println(str);   //打印字符串
      fis.close();     //关闭流
    } catch (FileNotFoundException fnfe) {
      System.out.println("文件打开失败。");
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
  }
}

**

FileOutputStream类

称为文件输出流,继承于OutputStream类,是进行文件写操作的最基本类;
它的作用是将内存中的数据输出到文件中,我们可以利用它来写文件。
FileOutputStream对象写文件方式-1

public class FileOutputStreamDemo1
{
  //在函数内部不进行异常处理,将异常抛出函数外部
  public static void main(String[] args) throws IOException
  {
    String str = "Hello world!";
    File file = new File("test.txt");  //创建文件对象
    //通过文件对象创建文件输出流对象
    //附加第二个参数true,指定进行文件追加,默认为不追加
    FileOutputStream fos = new FileOutputStream(file, true);
    
    //逐个将字符写入到文件中
    for (int i = 0; i < str.length(); i++)
    {
      fos.write(str.charAt(i));
    }
    fos.close();    //关闭流
  }
}

FileOutputStream对象写文件方式-2

public class FileOutputStreamDemo2
{
  //在函数内部不进行异常处理,将异常抛出函数外部
  public static void main(String[] args) throws Exception
  {
    String str = "I Love Java";
    //通过文件名创建文件输出流对象
    FileOutputStream fos = new FileOutputStream("test.txt");
    
    //将字符串转化为字节数组
    byte[] buffer = str.getBytes();
    //将字节数组中包含的数据一次性写入到文件中
    fos.write(buffer);
    //关闭流
    fos.close();
  }
}

创建一个目录和文件,并且写入数据然后再读出数据

import java.io.*;

public class FileOperation {
    public static void main(String[] args) throws IOException {
        //创建目录
        String directories ="D:\\aa\\bb\\cc";
        File file = new File(directories);
        boolean result = file.mkdirs();//创建多级目录
        if(!file.exists()){
            System.out.println("目录创建成功");
        }else{
            System.out.println("目录已存在");
        }

        System.out.println("文件是否存在:"+file.exists());//判断文件是否存在

        //创建文件
        String directories1 ="D:\\aa\\bb\\cc\\chw.txt";
        File file1 = new File(directories1);
        if (!file1.exists()){
            try {
                file1.createNewFile();
                System.out.println("目录创建成功!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        //获取目录大小
//        long size = FileUtils.sizeOfDirectory(new File("C:/test"));
//          System.out.println("Size: " + size + " bytes");

        //查询文件夹内的子文件夹
        File [] fs= file.listFiles();
        for (int i=0; i<fs.length;i++){
            System.out.println(fs[i].getName());//还能输出隐藏文件
        }

        //向文件中写入数据
        //FileOutputStream fos = new FileOutputStream(file1);//将文件里原来的数据覆盖
        FileOutputStream fos = new FileOutputStream(file1,true);//在文件中原有的内容追加上我写入是数据
        String str ="aaaaa";
        fos.write(str.getBytes());

        //将文件的内容读取到java程序中
        FileInputStream fis = new FileInputStream(file1);
        byte[] bs = new byte[(int) file1.length()];
        fis.read(bs);
        String strs = new String(bs);
        System.out.println(strs);



    }


}

查看结果

目录已存在
文件是否存在:true
chw.txt
aaaaa

在这里插入图片描述
字符流

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;


public class Work {
	//字节流:fileinputStream读  fileOutputStream写
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//文件的字符流 filereader   filewriter
		 File f=new File("D:\\test\\first.txt");
//		 try {
//			FileReader fr=new FileReader(f);
//			//char[] cs=new char[f.length()];//f.length获取内容字节长度
//			//fr.read(cbuf);
//			BufferedReader br=new BufferedReader(fr);
//			String str=br.readLine();
//			System.out.println(str);
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		 FileWriter fw=null;
		 try {
			fw=new FileWriter(f, true);//字符流需要清理通道
			PrintWriter pw=new PrintWriter(fw, true);
			fw.write("qwerytrhjgfh");
			//fw.flush();//清理管道
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
//			try {
//				//fw.close();//既会fw关闭,还会自动去清理管道
//			} catch (IOException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
		}
		 
	}

}

FileInputStream/FileOutputStream小结
FileInputStream类和FileOutputStream类是成对出现的,一个进行输入(读文件)操作,一个进行输出(写文件)操作;
由于采用字节方式进行数据传输,不必考虑数据的格式问题,这两个类对文件操作的效率较高;
可以使用这两个类完成复制文件的操作

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值