《Java从入门到放弃》JavaSE入门篇:文件操作

Java中的文件操作还有点小复杂···

不过没关系,我会把它讲得很简单,嘿嘿嘿!!!

在讲Java中的文件操作前,先了解一个概念——“流”,比如我们把一个杯子的水倒到另一个同样大小的杯子,就是以流的方式处理的(如果你把水冻成冰了再整个放进去就当我没说吧 - -)。

其实我的理解很简单,“流”就是一串数据,至于这一串数据中每个数据单元有多大,Java中提供了两种处理方法:字节流和字符流

无论是字节流还是字符流,根据处理方式又可以分为输入流和输出流。这一篇,我们就来简单学学字节流和字符流的输入和输出。

一、字节流

    字节都知道吧?

    什么?不知道!!!好吧,不知道就不知道吧,那就简单说说,计算机保存数据的最小单位是bit(位),这是一个二进制单位,它的值只有0和1。

    一个字节就是一个Byte(注意这是大B,那个是小b),一个字节占8bit的大小。像现在的操作系统有什么32位啊64位啊,主要就是处理数据的时候有区别,32位的每次处理的最小单位是4个字节,而64的是8个字节。具体还有很多区别之处,这儿我们就没必要细说了。如果感兴趣的话,那就百度走起!!!

    其实文件操作很简单,跟赵本山小品中把大象放进冰箱的步骤是一样一样滴。

    第一步:打开冰箱门

    第二步:把大象放进去(或者拿出来)

    第三步:关闭冰箱

    就这三步,是不是超级简单啊!!!

    因为无论读文件还是写文件的步骤都一样,只不过使用的类不一样,所以我们直接来看看如何复制文件吧。

/**
 * 字节流方式复制文件(任何文件都可以复制)
 * @param oldFile 被复制文件
 * @param newFile 复制后的文件
 */
public static void copyFile(String oldFile, String newFile){
    File srcFile = new File(oldFile);   //源文件对象
    File destFile = new File(newFile);  //目标文件对象
    try {
    	if (!(destFile.exists())) {      //判断目标文件是否存在
  	      destFile.createNewFile();  //如果不存在则创建新文件
  	}
  	//使用源文件对象创建文件输入流对象
  	FileInputStream fis = new FileInputStream(srcFile);
  	//使用目标文件对象创建文件输出流对象
  	FileOutputStream fos = new FileOutputStream(destFile);
  	    
  	byte[] buf = new byte[1024];  //创建字节数组,作为临时缓冲,每次读取的数据量
  	System.out.println("开始复制文件...");
  	while (fis.read(buf) != -1) {  //循环从文件输入流中读取数据,-1表示读完了文件
  	      fos.write(buf);    //写入到文件输出流中
  	}
  	System.out.println("文件复制成功!");

	fis.close();    //关闭流
	fos.close();
    } catch (Exception e) {
	e.printStackTrace();
    } 
}

里面涉及到的几个对象简单介绍一下吧。

1.File类:既可以表示文件,也可以表示目录。常用的方法如下:

2.FileInputStream类:继承于InputStream类,用于读文件,以字节方式将文件中的数据输入到内存中。

3.FileOutputStream类:继承于OutputStream类,用于写文件,以字节方式将内存中的数据输出到文件中。

注意:因为是以字节的方式读或写,所以在处理的过程中,文件是无法使用的,就和我们在网上下载文件是一样滴道理


二、字符流

    字符流就很好理解了,以字符为最小单位来处理数据,一般用于处理文本类的文件比较方便,很多小说阅读器读取TXT的小说就使用这种方式来处理。

    接下来,分别写两个方法以字符流的方式来处理文本文件。

2.1逐行读取文件内容,并显示到控制台

/**
 * 读取文本文件内容
 * @param path 文件路径
 */
public static void txtRead(String path){
    File file = new File(path);
    try {
    	//通过文件对象创建文件读取流对象
        FileReader fr = new FileReader(file);
        //将文件读取流包装成缓冲读取流
        BufferedReader br = new BufferedReader(fr);
        
        String str;
          //逐行读取数据
        while ((str = br.readLine()) != null){
            System.out.println(str);
        }
        br.close();   //关闭流
        fr.close();   //关闭流
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2.2将输入的文本保存到文件

/**
 * 写入文本文件
 * @param path 文件路径
 */
public static void txtWriter(String path){
	File file = new File("test.txt");
	try {
		//通过文件对象创建文件输出字符流对象
		FileWriter fw = new FileWriter(file);
		//将文件输出字符流包装成缓冲流
		BufferedWriter bw = new BufferedWriter(fw);
		bw.write("大家好!");
		bw.write("我正打算放弃Java,");
		bw.newLine();    //换个新行
		bw.write("请多多指教。");
		bw.close();      //关闭流
		fw.close();      //关闭流
	} catch (Exception e) {
		e.printStackTrace();
	}
}

OK,文件的基本操作就介绍这到儿吧,其实实际开发用得更多的一种方式是序列化和反序列化,这个操作的代码比较简单,就不在这儿介绍了,有兴趣的小伙伴自行百度一下吧。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coder修行路

python中常用的模块的总结

1、 模块和包 a.定义: 模块用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件。(例如:文件名:t...

3009
来自专栏JetpropelledSnake

SQL学习之SQL注入学习总结

1554
来自专栏数据分析

[数据库基础]——索引详解

索引对于接触过数据库的人,都不会很陌生,但是说实话,也不一定很熟悉。先来介绍下索引的优点。 提高性能 现在有一个数据库表[Words],有[WordID],[W...

3376
来自专栏大内老A

ASP.NET Core的配置(4):多样性的配置来源[中篇]

我们在本篇文章中会介绍三种针对物理文件的ConfiguationProvider,它们分别是针对JSON文件的JsonConfiguationProvider,...

1798
来自专栏腾讯云流计算

Flink 类型和序列化机制简介

使用 Flink 编写处理逻辑时,新手总是容易被林林总总的概念所混淆,本文将逐步解密 Flink 的类型和序列化机制。

58216
来自专栏王硕

原 PostgreSQL的系统函数分析记录

853
来自专栏iOS技术杂谈

NSCopying和NSCoding对象序列化反序列化基础详解你要知道的NSCopying、NSCoding协议及对象序列化和反序列化都在这里

你要知道的NSCopying、NSCoding协议及对象序列化和反序列化都在这里 转载请注明出处 https://cloud.tencent.com/devel...

4208
来自专栏奔跑的蛙牛技术博客

node中和C++有什么关联

参考文章-写得不错 都说node的一些底层借助了一些c++函数,到底如何交互的以及为什么会用到C++

893
来自专栏ImportSource

来自JVM的一封ClassFile介绍信

我是一个class文件。我的内部是由一个被叫做ClassFile的structure组成。 我在jvm中占有很重要的地位,你可去看看jvm规范中我占了多少篇幅...

3598
来自专栏小白客

Python基础学习-用户输入和while循环

一:函数input()的工作原理: 函数input()让程序暂停运行,等待用户输入一些文本。 获取用户输入后,Python将其存储在一个变量中,以...

3378

扫码关注云+社区