文件管理

1.Java中的对文件的管理,通过java.io包中的File类实现

2.Java中文件的管理,主要是针对文件或是目录路径名的管理

    文件的属性信息

    文件的检查

    文件的删除等

    不包括文件的访问

   文件的构造方法

File 对象名 = new File(String path);//指定路径名来创建File对象。
File 对象名 = new File(String parent,String child) ;//在父类parent路径下,创建child文件。
File 对象名 = new File(File parent,String child) ;在父类对象parent路径下,创建child文件

常用方法

createNewFile() 在File的抽象路径指定的文件不存在时,创建文件
boolean exists() 判断File对象指向的抽象路径的文件或者目录是否存在
boolean delete() 删除File对象所指向的文件或者目录
boolean mkdir() 创建指定的目录 ,如果父目录不存在,会返回false
boolean mkdirs() 创建指定的目录,如果父目录不存在,会先创建父目录。
boolean isFile() 判断当前的File对象是否是一个文件,是文件返回true,否则返回false
getAbsolutePath() 获取文件的绝对路径
getName() 获取文件名
list() 获取目录下的子文件(及子目录)的名称,返回字符串数组
listFiles()获取目录下的子文件(及子目录)的File数组

 例子

package day0822;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileCrateDemo {
	
	public static void main(String[] args) throws IOException {
		String path = "hello.txt";
		String parent = "D:/test1";
		String child = "test.txt";
		File file = new File("D:/test2");
		File file1 = new File(path);//指定路径名来创建对象
		File file2 = new File(parent, child);//在父类parent路径下,创建child对象
		File file3 = new File(file, child);//在父类对象parent路径下,创建child对象
		file.mkdirs();//创建文件夹,mkdir可创建一个,mkdirs可创建多个
		System.out.println(file3.createNewFile());//创建新文件,返回值为布尔值
		System.out.println(file.delete());//文件夹为空时,才可以删除,返回值为布尔值
		System.out.println(file3.getPath());//获取文件路径,返回值为String
		System.out.println(file1.getAbsolutePath());//获取文件的绝对路径,返回值为String
//		file3.delete();//文件夹为空时,才可以删除
//		System.out.println(file.delete());//直接删除文件
	}
}

数据流

概念:用来表示连续不断的一串数据的集合。

数据流的分类:

1.按流的方向:输入流以及输出流。

2.处理数据的单位不同:字节流、字符流。

3.按功能分:节点流、处理流

继承规则:

  • 输入字节流
  • 全部继承自InputStream,叫XxxInputStream
  • 输出字节流
  • 全部继承自OutputStream,叫XxxOutputStream
  • 输入字符流
  • 全部继承自Reader,叫XxxReader
  • 输出字符流
  • 全部继承自Writer,叫XxxWriter

输入字节流

  • 常用的方法
  • int read( ) 每次读取一个字节的内容,以int的形式返回,如果没有内容可以读了,返回-1;
  • int read(byte[] buff) 将读到的内容放到数组buff中,返回实际读到的字节数。
  • int read(byte[] buff,int offset,int len) 将读到的内容放在数组buff中,从数组的offset的位置开始往后放,len表示读取的长度。
  • close() 关闭流,释放资源

输出字节流

  • 常用的方法
  • write(byte[] buffer) 将buffer中的字节内容输出到文件中。
  • write(byte[] buffer,int setoff,int len) 将buffer中的字节内容从setoff开始的len个字节写入到文件中。
  • flush() 刷新输出流的缓冲区,将缓冲区的字节内容写入到文件中。
  • close() 关闭流,释放资源

节点流

  • 从数据源(文件,内存等)直接读写数据的类,称为节点流
  • FileInputStream、FileOutputStream、FileReader、FileWriter

例子

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
 * 利用FileInputStream读取文件内容
 * 1.字符流
 * 2.字节流
 * @author hydra
 *
 */
public class FileInputStreamDemo {
	
	public static void main(String[] args) throws IOException {
		//创建FileInputStream对象
		FileInputStream in = new FileInputStream("hello.txt");
		int tmp = 0;//如果返回值不是1,表示内容没有读完,一直循环
		while((tmp=in.read())!=-1) {
			System.out.print((char)tmp);
		}
		//一次读取内容存入到数组buf中
		byte[] buf = new byte[512];
		in.read(buf);
		System.out.println(new String(buf));
		in.close();//关闭资源
		
	}
	
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * 向文件里写
 * @author hydra
 *
 */
public class FileOutputStreamDemo {
	
	public static void main(String[] args) throws IOException {
		//第二个参数表示是否在文件原有的内容之后追加。
		FileOutputStream out = new FileOutputStream("hello.txt",true);
		//将内容写入文件
		out.write("aaabbbccc".getBytes());
		//关闭资源
		out.close();
	}
}
public class FileReaderdemo {
	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("hello.txt");
		int tmp = 0;//如果返回值不是1,表示内容没有读完,一直循环
		while((tmp=fr.read())!=-1) {
			System.out.print((char)tmp);
		}
		FileWriter fw = new FileWriter("hello.txt",true);
		fw.write("llll");
		fw.close();
	}
}

处理流

  • 对于流进行了封装,用于提高读写效率,一般接收一个已经存在的流作为参数。
  • BufferedInputStream、BufferedOutputStream
  • 常用的方法:
  • BufferedInputStream(InputStream in) 使用输入流对象构造一个缓冲输入流,默认带有8k字节的缓冲区
  • BufferedInputStream(InputStream in,int len) 使用输入流对象构造一个缓冲区大小为len字节的缓冲输入流
  • BufferedOutputStream(OutputStream out) 使用输出流out创建一个带有8k字节缓冲区的缓冲输出流
  • BufferedOutputStream(OutputStream out,int len) 使用输出流out创建一个带有len字节缓冲区的缓冲输出流
  • 其他的读写方法与之前的相同。
  • BufferedReader / BufferedWriter
  • readLine() 一次读文件的一行
  • newLine() 输出换行符
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 缓冲输入流
 * @author hydra
 *
 */
public class BufferedInputStreamDemo {

	public static void main(String[] args) throws IOException {
		FileInputStream in = new FileInputStream("hello.txt");
		//在FileInputStream中创建输入缓冲流
		BufferedInputStream bin = new BufferedInputStream(in);
		int tmp = 0;
//		while((tmp=bin.read())!=-1) {
//			System.out.println((char)tmp);
//		}
		byte[] barray = new byte[32];
		if(bin.read(barray)>0) {
			System.out.println(new String(barray));
		}
		//关闭输入流
		bin.close();
		
		FileOutputStream out = new FileOutputStream("hello.txt",true);
		BufferedOutputStream bout  = new BufferedOutputStream(out);
		bout.write("hello,world".getBytes());
		bout.flush();//将缓冲区的内容强制写入文件
		bout.close();
	}
}