JavaSE——IO(File文件与输入输出流)

一、File文件操作类

1.File类的使用

java.io.File类是一个普通的类,直接产生实例化对象即可。如果要实例化对象则需要使用到两个构造方法

public File(String pathname) 
public File(String parent, String child),设置父路径和子路径
(1)创建一个新文件
 createNewFile():返回值为boolean
(2)判断文件是否存在
exists(): 返回值为boolean
(3)删除文件
delete(): 返回值为boolean
(4)判断路径是否为文件
isFile(): 返回值为boolean
(5)判断路径是否为目录
isDirectory(): 返回值为boolean
(6)取得文件大小()字节
length(): 返回值为long
(7)取得最后一次修改文件的时间
lastModified(): 返回值为long
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

//Java文件操作
public class Test {
	public static void main(String[] args) {
		File file = new File("C:\\Users\\李昕阳\\Desktop\\Test1.txt");
		if (file.exists() && file.isFile())// 若文件存在且是文件的形式
		{

			System.out.println("文件大小" + file.length());
			// 若直接写成file.lastModified(),那么返回的时间就是从1970年1月1日开始到修改的时间并且单位为ms
			// System.out.println("最后一次修改时间"+file.lastModified());
			// 下面是将时间修改为年-月-日的格式
			SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy年mm月dd日  hh:mm:ss");
			Date date = new Date(file.lastModified());
			String mString = simpleDateFormat.format(date);
			System.out.println("最后一次修改时间" + date);
			// 删除文件
			file.delete();// 将文件删除
		} else {
			try {
				file.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch blocke.printStackTrace();
			}
		}
	}
}
注:在windows的环境下,对于路径的书写是\\而在Linux的环境下对于路径的书写是/,为了解决这个问题,在引用路径时会采用File类的一个常量"public static final String separator "来描述
		String sep = File.separator;
		File file = new File("C" + sep + "Users" + sep + "李昕阳" + sep + "Desktop" + sep + "Test1.txt");

2.目录操作
(1)getParent():返回值为String,取得父路径

(2)getParentFile():返回值为File,取得父File对象

(3)mkdirs():返回值为boolean,创建父目录(无论有多少级都会创建)

(4)isFile():返回值为boolean,判断文件是否存在

(5)isDirectory():返回值为boolean,判断是否为目录

(6)length():返回值为long,取得文件大小()字节

(7)lastModified():返回值为long,最后一次修改的日期

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test
{
	public static void main(String[] args) throws IOException {
		File file = new File("C:\\Users\\李昕阳\\Desktop\\Parent\\Java\\java.txt");
		if(!file.getParentFile().exists())
		{
			//若文件java.txt的父目录不存在,就创建目录
			file.getParentFile().mkdirs();
		}
		if(file.exists()&&file.isFile())
		{
			//若文件java.txt存在,就将文件删除
			System.out.println("文件大小"+file.length());
			SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy年mm月dd日  HH:mm:ss");
			Date date = new Date(file.lastModified());
			String mString = simpleDateFormat.format(date);
			System.out.println("最后一次修改时间" + date);
			file.delete();
		}
		else {
			file.createNewFile();
		}
	}
}

(7) listFiles():列出目录中的全部组成
package IO;

import java.io.File;

public class Test
{
	public static void main(String[] args) {
		File file = new File("C:\\Users\\李昕阳\\Desktop");
		if(file.exists() && file.isDirectory())
		{
			File[] result = file.listFiles();
			for(File file2:result)
			{
				System.out.println(file2);
			}
		}
		
	}
}

二、字节流与字符流
字节流:InputStream,OututSteam

字符流:Reader,Writer

(1)字节流与字符流操作的本质区别:
字节流是原生的操作,而字符流是经过处理后的操作。
(2)字节流和字符流的基本操作流程几乎是一样

        1)根据文件路径创建File类对象 ;
        2)根据字节流或字符流的子类实例化父类对象 ;
        3)进行数据的读取或写入操作
        4)关闭流(close())。

1.字节输出流(OutputStream)
(1)实例化对象的时候有两种构造方法
        1)FileOutputStream(File file):接收File类,并覆盖
        2)FileOutputStream(File file, boolean append):接收File类,追加

(2)OutputStream类中的方法

        1)write(byte b[]):将给定的字节数组内容全部输出
        2)write(byte b[], int off, int len):将部分字节数组内容输出
        3)write(int b):输出单个字节
(3) OutputStream类实现的接口
        1)Closeable
        2)Flushable
package IO;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.print.attribute.standard.MediaSize.Other;

public class Test
{
	public static void main(String[] args) throws IOException {
		//1.
		File file = new File("C:\\Users\\李昕阳\\Desktop\\Test\\Test.txt");
		if(!file.getParentFile().exists())
		{
			file.getParentFile().mkdirs();
		}
		//2.
		//覆盖
		OutputStream outputStream = new FileOutputStream(file);
		
		//追加
		//OutputStream outputStream = new FileOutputStream(file,true);
		//3.
		String string = "\r\n123456789";
		outputStream.write(string.getBytes());//全部输出
		outputStream.write(string.getBytes(),0,5);//只输出[0,5)
		//4.
		outputStream.close();
	}
}

2.字节输入流(InputStream)

输入流的三种返回值:read(byte[] data):int
1)当读取数据大小>数组data大小:返回data length
2)当数组大小data>读取数据大小:返回具体数据大小

3)没有数据了,还在读取,返回-1
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Test
{
	public static void main(String[] args) throws IOException {
		File file = new File("C:\\Users\\李昕阳\\Desktop\\Test\\Test.txt");
		if(file.exists())
		{
			InputStream inputStream = new FileInputStream(file);
			byte[] data = new byte[1024];
			int len = inputStream.read(data);
			String string = new String(data, 0, len);
			System.out.println("读取内容"+string);
			inputStream.close();
		}
	}
}

3.字符输出流(Writer)
方法与 OutputStream类似
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Test
{
	public static void main(String[] args) throws IOException {
		File file = new File("C:\\Users\\李昕阳\\Desktop\\Test\\Test.txt");
		if(!file.getParentFile().exists())
		{
			file.getParentFile().mkdirs();
		}
		String string = "字符输出流";
		Writer writer = new FileWriter(file,true);
		writer.write(string);
		writer.close();
	}
}

字符输出流 Writer 与字节输出流 (OutputStream)的区别:
字符输出流会先把数据放在缓冲区中,若没有关闭流,则不会将数据写入到目标终端,此时要想把数据输送到目标终端

a).close()
b)调用flush方法,flush():叫做强制清空缓冲区
4.字符输入流(Reader)
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StreamCorruptedException;

import javax.sound.sampled.LineListener;

public class Test
{
	public static void main(String[] args) throws IOException{
		File file = new File("C:\\Users\\李昕阳\\Desktop\\Test\\Test.txt");
		if(file.exists())
		{
			Reader reader = new FileReader(file);
			char[] data = new char[1024];
			int len = reader.read(data);
			String string = new String(data,0,len);
			System.out.println("读取内容"+string);
			reader.close();
		}
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值