北理工Java实验2.5(文件读入与写出)

问题需求:

打开第 11 章中讲到的 IOStreamDemo.java 文件,一次读取其中的一行,令每行形成一个 String 对象。然后利用 java.util.Comparator 接口重新定义 String 对象间的比较方法:将每个 String 中的小写字母转为大写后再进行比较。使用该比较法对这些 String 进行排序,按从大到小的顺序存入一个 LinkedList。最后将LinkedList 中的 String 按存入的相反顺序输出到另一个文件 inverse.txt 中。


项目结构:

这里写图片描述


源码地址:

https://github.com/HuangFuGui/Java/tree/master/javaExperiment2.5


总体分析:

StrArrayComparator类实现Comparator(泛型为String)接口并重写compare方法以为Arrays.sort()定义比较器。fileReader类中先读入IOStreamDemo.java文件,一次读一行,并将每行内容存入字符串数组中。通过File类新建文件名为“inverse.txt”的文件,配合BufferedWriter类将内容写入,最后关闭BufferedWriter。


StrArrayComparator.java(定义从大到小的比较器):

package solvePackage;

import java.util.Comparator;

public class StrArrayComparator implements Comparator<String> {

    @Override
    public int compare(String o1, String o2){
        //按题目要求将字符串全部转换为大写再比较
        o1 = o1.toUpperCase();
        o2 = o2.toUpperCase();

        return o2.compareTo(o1);
    }
}

fileReader.java(先读入再写出):

package solvePackage;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;

public class fileReader {

public static void main(String[] args) throws IOException {

        BufferedReader in = new BufferedReader(
                new FileReader("IOStreamDemo.java")); 
        String s;
        String[] array = new String[200];
        int i = 0;
        while((s = in.readLine()) != null){//readLine()方法每次读取文件的一行直到遇到换行符
            array[i++] = s + "\n";              //读取文件的每一行存入字符串数组
        }
        in.close();

        Arrays.sort(array, 0, i, new StrArrayComparator());     //从大到小排序
        //new StrArrayComparator()为比较器,引用为:Comparator<String>

        LinkedList<String> lList = new LinkedList<String>();
        int cnt = 0;
        for(String str : array){
            if(cnt == i)
                break;
            lList.add(str);                                     //从大到小的顺序存入LinkedList
            cnt++;
        }

        File file = new File("inverse.txt");
        if(!file.exists()){
            file.createNewFile();
        }

        BufferedWriter bw = new BufferedWriter(
                new OutputStreamWriter(
                        new FileOutputStream("inverse.txt")));


        for(int j = lList.size() - 1; j >= 0; --j){
            bw.write(lList.get(j));                             //按存入的反向顺序存入inverse.txt
        }

        bw.close();

    }
}

运行结果:

生成inverse.txt文件,并将内容全部写入。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值