javase重新开始系列之文件操作与I/O流

为什么要使用I/O技术

在变量、数组和对象中存储的数据是暂时存在的,程序结束后它们就会丢失。为了能够永久的保存程序创建的数据,需要将其保存在磁盘文件中,这样以后就可以在其他程序中使用它们。


为了对文件进行操作,Java本身提供了一个API,就是java.io.File类,使用这个类来访问文件属性

而在jdk1.7之后又提供了一个功能更强大的API:java.nio.file.Files

 

File类并不用来进行文件的读/写操作,它用来描述文件对象的属性,既可以表示文件,也可以表示目录。使用它提供的方法,我们可以得到所指对象的描述信息,包括名称、存在否、读/写权限、路径等等。

(注意:在windows环境中使用路径是不能用\分隔符,这个符号已经被转义了,应使用\\或/例如D:\\java\\b.txt或D:/java/b.txt)

创建文件并输出文件属性
public class FileTest {
	public static void main(String[] args) {
		String path = new String(new Scanner(System.in).nextLine());//获取控制台输入的文件名路径
		File file = new File(path);//用获得的路径实例一个File对象
		if (!file.exists()) {//判断文件是否存在
			System.out.println("文件不存在,正在创建文件");
			try {
				file.createNewFile();//新建一个文件
				System.out.println("文件创建成功");
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
				System.out.println("文件创建失败");
			}
		}else{
			System.err.println(file.getName());//输出文件的名字
			System.out.println(new Date(file.lastModified()));//输出文件最后的修改时间
			System.out.println(file.getAbsolutePath());//输出文件的绝对路径
		}
	}
}
显示某个目录下的文件、目录信息
public class DirTest {
	public static void main(String[] args) {
		File dir = new File(System.getProperty("user.dir"));//获取用户目录
		System.out.println("当前目录是:"+dir.getAbsolutePath());
		File FileOrDirlist[] = dir.listFiles();
		for (int i = 0,j = FileOrDirlist.length; i < j; i++) {
			if(FileOrDirlist[i].isDirectory()){
				System.out.println("子目录:"+FileOrDirlist[i].getName());
			}else{
				System.out.println("文件:"+FileOrDirlist[i].getName()+",大小:"+FileOrDirlist[i].length()
						+ "字节");
			}
			
		}
	}
}
FIles(jdk1.7后)暂不多说,具体看API说明。




I/O流:
File类可以创建文件,但并不能访问、操作文件的内容,这个时候用到I/O流。
输入输出是对内存而言,而不是对文件。(输入到内存,输出到文件)

按流传输基本单位,分为两种

  ①字节流:基本单位是字节(8位)

  抽象类:InputStream负责输入流

         OutputStream负责输出流

  子类命名格式:XxxxInputStream或XxxxOutputStream(FileInputStream/FileOutputStream)

②字符流 (Unicode): 基本单位是 16 Unicode 字符

  抽象类:Reader  负责输入流

                Writer负责输出流

   子类命名格式:XxxxReader或XxxxWriter(InputStreamReader/OutputStreamWriter)


运用BufferedReader和BufferedWriter也可以读写文本文件,且性能较高,因其带有缓冲区
用法:
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//用BufferedReader获取输入,System.in是位流,要将其转换成字符流
BufferedWriter bufWriter =  new  BufferedWriter( new  FileWriter(path )); 



(未完待续)

猜你喜欢

转载自blog.csdn.net/jasonsama/article/details/52191761