头歌 Java语言之文件操作

第1关:文件读取 - 打印时刻表

任务描述

小明从网上下载了一份火车时刻表的文本文件,但是性格怪异的小明偏偏不想用记事本打开这个文档,而是想通过Java读取这个文件,再输出在显示器上,下面请你来帮他完成这项工作。

相关知识
FileReader类

该类用于从文件中读取数据,它的对象用关键字new来创建。在创建该对象之前,我们还需先使用File()方法来创建一个文件对象。

下面是创建这两个对象的示例,注意创建对象前要导入包:

 
  1. import java.io.File;
  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. File file = new File("src/Hello World.txt");
  5. FileReader fileReader = new FileReader(file);

对象创建好之后,我们用read()方法读取文件中的数据。该方法会返回一个整数值,为所读取的字符在Unicode中的值,例如如果读到的字符是A,则返回值是65;当读取到文件末尾时,返回-1。因此我们需要使用(char)方法对返回值进行类型转换(除返回值为-1之外),还原原本的字符A

下面是一个读取文件内容并输出在显示器上的示例(假设所需对象已经创建好):

 
  1. int read = fileReader.read();
  2. while (read != -1) { //循环读取,直到read的值为-1,表示文件读到末尾
  3. System.out.print((char)read); //输出读取的数据,使用(char)方法对read的值进行类型转换
  4. read = fileReader.read(); //读取下一个字符
  5. }

当读取文件完毕后,记得要关闭文件流

 
  1. fileReader.close();

除了FileReader类之外,还有很多类也可以实现从文件中读取数据,例如FileInputStream类 。该类的对象创建和使用的语法与FileReader类基本一致,但是该类的对象在读取中文字符时会出现乱码。

在此,我们只要求同学们掌握FileReader类的使用。

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 读取火车时刻表,文件路径为"src/step1/Time_Table.txt";
  • 将时刻表中的文件完整地打印出来。
评测说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

本题没有测试样例,平台将比对文件内容与同学们的程序输出的内容。


人生的坚持,学习的坚持,尽管遭遇困苦,但是我们却能在一次次的苦难中成长,重新爬起来。这就是奋斗的人生。就是挥洒自己青春,汗水的有意义,有价值的生活。而,我虽然在平凡的人群中不起眼,可是每个人却闪耀着自己独到的光辉灿烂,挥洒着自己的热血,散发着光芒的人生值得每个人去深思。

package step1;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class TimeTable {
    public static void main(String[] args) throws IOException {
        /********** Begin *********/
		File file = new File("src/step1/Time_Table.txt");
		FileReader fileReader = new FileReader(file);
		int read = fileReader.read();
		while(read!=-1){
			System.out.print((char)read);
			read = fileReader.read();
		}
		fileReader.close();



        /********** End *********/
    }
}

第2关:文件写入 - 添加时刻表

任务描述

小明成功的打开了上道题中的火车时刻表,但是小明发现这份时刻表是错误的,于是他从网上查询了相应资料,准备重写这份时刻表。那么,如何通过Java程序来向文本文档中写入数据呢?请你来帮他完成这项工作。

相关知识
FileWriter类

该类用于向文件中写入数据,它的对象用关键字new来创建。在创建该对象之前,我们同样需先使用File()方法来创建一个文件对象。

下面是创建这两个对象的示例,注意创建对象前要导入包:

 
  1. import java.io.File;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. File file = new File("src/Hello World.txt");
  5. FileWriter fileWriter = new FileWriter(file, true);

注意最后一条语句中调用构造方法FileWriter()时的传递值true,它表示当fileWriter对象对文件再次写入时,会在文件的末尾追加数据,而不是将文件覆盖。如果想将原文件数据覆盖,传递false

对象创建好之后,我们用write()方法向文件写入数据,write()方法的小括号中直接添加需要写入文件的字符串类型数据。如果我们需要写入一个换行符,我们可以先定义一个LINE_SEPARATOR常量,然后用write()方法向文件写入该常量。

下面是一个向文件写入两行字符串数据的示例(假设所需对象已经创建好):

 
  1. private static final String LINE_SEPARATOR = System.getProperty("line.separator"); //定义LINE_SEPARATOR常量,表示换行符
  2. String string1 = "Hello";
  3. String string2 = "World";
  4. fileWriter.write(string1 + LINE_SEPARATOR + string2 + LINE_SEPARATOR);
  5. fileWriter.close();

写入文件完毕后,同样要记得关闭文件流

 
  1. fileWriter.close();
编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • time1time2变量为需要向文件src/step2/Time_Table.txt写入的两行时刻表数据。
  • 在恰当的位置添加换行符(养成在文件末尾添加一个换行符的习惯)。
  • 文件写入类型为覆盖原文件数据后写入新的数据。
评测说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

本题没有测试样例,平台将比对添加数据之后的文件内容与标准答案。


人生,对于我们谁都有许多想法,但由于迟迟没有付诸行动,结果多少光阴过去,却只能停留在计划中,要想拥有成功,就需要赋予人生足够的速度,这是成功者的姿态,也是胜利者的姿态。

package step2;

import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;

public class AddTimeTable {
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");  //定义LINE_SEPARATOR常量,表示换行符
    public static void start(String time1, String time2) throws IOException {
        /********** Begin *********/
		File file = new File("src/step2/Time_Table.txt");
		FileWriter fileWriter = new FileWriter(file,false);
		fileWriter.write(time1+LINE_SEPARATOR+time2+LINE_SEPARATOR);
		fileWriter.close();


        /********** End *********/
    }
}

第3关:Java文件操作综合运用

任务描述

本关的任务是综合运用所学知识,完成编程要求中提出的各项要求。

相关知识
文件创建

使用文件对象的createNewFile()方法创建文件,该方法会返回一个布尔值,若成功创建文件,返回true;否则返回false

 
  1. File file = new File("src/step1/Hello World.txt"); file对象指向src文件夹下的step1文件夹下的Hello World.txt文件(此时此文件不存在)
  2. if (!file.exists()) { //如果文件不存在
  3. System.out.println(file.createNewFile()); //创建文件,并输出布尔值
  4. }
文件或文件夹删除

删除文件或文件夹使用文件对象的delete()方法,该方法会返回一个布尔值,若成功删除文件,返回true;否则返回false

 
  1. File file = new File("src/step1/Hello World.txt"); //file对象指向src文件夹下的step1文件夹下的Hello World.txt文件
  2. if (file.exists()) { //如果文件存在
  3. System.out.println(file.delete()); //删除该文件,并输出布尔值
  4. }
 
  1. File file = new File("src/step1"); //file对象指向src文件夹下的step1文件夹
  2. if (file.exists()) { //如果文件夹存在
  3. System.out.println(file.delete()); //删除该文件夹,并输出布尔值
  4. }

操作完毕后同样要记得关闭文件流。

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 读取readme.txt文件中的内容,文件路径为:src/step3/readme.txt
  • 在相同的文件路径下创建readmeCopy.txt文件,将readme.txt文件中的内容写入readmeCopy.txt
  • 删除readme.txt文件。

提示:

  • 可以使用StringBuilder类的对象保存读取到的readme.txt文件中的内容,该对象已为同学们创建好,使用append()方法向对象添加数据。
  • 向文件写入StringBuilder类的对象时,为了保持数据的一致性,需要先使用toString()方法将数据对象转换为String类型后再写入。
评测说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

本题没有测试样例,平台将比对同学们的程序输出的内容与标准答案。

package step3;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class DeleteFiles {
    public static void start() throws IOException {
        StringBuilder data = new StringBuilder();
        /********** Begin *********/
        //读取readme.txt文件
		FileReader fileReader = new FileReader("src/step3/readme.txt");		
        //写入readmeCopy.txt文件
		File file = new File("src/step3/readmeCopy.txt");  
        if (!file.exists()) {   //如果文件不存在
        System.out.println(file.createNewFile());   //创建文件,并输出布尔值
        }
		FileWriter fileWriter = new FileWriter("src/step3/readmeCopy.txt");
		int read = fileReader.read();
		while(read!=-1){
			System.out.print((char)read);
            fileWriter.write((char)read);
		     read=fileReader.read();
		}
		fileReader.close();		
        //删除readme.txt文件
		File file1 = new File("readme.txt");  
        if (file1.exists()) {   //如果文件存在
        System.out.println(file1.delete());   //删除该文件,并输出布尔值
        }
        /********** End *********/
    }
}

  • 22
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值