使用InputStreamReader读入,使用OutputStreamWriter写出,将一首诗按行重写?

Posted ukzq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用InputStreamReader读入,使用OutputStreamWriter写出,将一首诗按行重写?相关的知识,希望对你有一定的参考价值。

https://www.processon.com/view/link/5b1a3880e4b00490ac8f5f40

今天浪费好多时间在这个编程题,还没做完,再完美点是将多线程开启后随机选取一个文本文件的诗词进行重写. 或者是多个线程从网络上搜索相关字眼进行摘录重写查找关键字.

虽然不懂什么叫爬虫,但可能这个东东也可能能办到吧?因为看到InputStreamReader的in属性可以使用URL. 

package 换行诗;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

public class Test9 implements Runnable {

    public static void main(String[] args) {
        Runnable r1 = new Test9();
        Thread t1 = new Thread(r1);// t1线程

        Test9 test = new Test9();
//        t1.start();
        InputStream is = null;
        OutputStream os = null;
        OutputStreamWriter osw = null;
        InputStreamReader isr = null;

        try {
            is = new FileInputStream("test1.txt");
            os = new FileOutputStream("test2.txt");
            isr = new InputStreamReader(is, "UTF-8");
            osw = new OutputStreamWriter(os, "UTF-8");

            ArrayList<Integer> one = test.getDataInt(isr);
            ArrayList<Integer> two = test.getList(one);
            final String ANTI_POEM = test.getAntiPoem(two);

            System.out.println(ANTI_POEM);
            osw.write(ANTI_POEM);

        } catch (Exception e) {

            e.printStackTrace();
        } finally {
            {
                try {
                    if (osw != null)
                        osw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                try {
                    if (isr != null)
                        isr.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
                try {
                    if(os != null)
                        os.close();
                }catch (Exception e) {
                    e.printStackTrace();
                }
                
                try {
                    if(is != null) {
                        is.close();
                    }
                    
                }catch (Exception e) {
                    e.printStackTrace();
                }
                
            }
        }
    }


    /////////////////////////////////////////////////////

    private String getAntiPoem(ArrayList<Integer> two) {
        String poems = "";
        // 换行计数
        int _1310 = 5;
        int _count = 0;
        int strAnd_n = 0;
        for (int e = 0; e < two.size(); e++) {
            poems += String.valueOf((char) ((int) (two.get(e))));
            if (poems.length() == _1310) {
                poems += "
";// 假设为6
                _count++;
                if (_count == 1) {
                    strAnd_n = poems.length();
                }
                if (_count < 3) {
                    _1310 += strAnd_n;
                }
            }
        }
        return poems;
    }

    ////////////////////////////////////////////////////////////

    public ArrayList<Integer> getDataInt(InputStreamReader isr) {
        ArrayList<Integer> dataInt = new ArrayList<>();
        int data = 0;
        String dataStr = "";
        try {
            while ((data = isr.read()) != -1) {
                dataStr = data + "";
                if (dataStr.length() == 5) {
                    dataInt.add(data);
                }

            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (isr != null)
                    isr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return dataInt;
    }

    ///////////////////////////////////////////////////////////////

    public ArrayList<Integer> getList(ArrayList<Integer> dataInt) {
        int w;
        int index;

        int dataIndex = dataInt.size() - 1;
        ArrayList<Integer> cutes = new ArrayList<>();
        for (w = dataIndex; w >= 4; w--) {
            for (int l = 0; l < 5; l++) {
                index = (w - 4 + l);
                cutes.add(dataInt.get(index));
            }
            w -= 4;
        }
        return cutes;

    }

    InputStream inThread = null;
    OutputStream outThread = null;
    InputStreamReader isrThread = null;
    OutputStreamWriter oswThread = null;

    @Override
    public void run() {
        try {
            inThread = new FileInputStream("hello.txt");
            outThread = new FileOutputStream("hello1.txt");
            isrThread = new InputStreamReader(inThread, "utf-8");
            oswThread = new OutputStreamWriter(outThread, "utf-8");
            final String ANTI_POEM = getAntiPoem(getList(getDataInt(isrThread)));
            oswThread.write(ANTI_POEM);
            System.out.println(ANTI_POEM);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (oswThread != null)
                    oswThread.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

            try {
                if (isrThread != null)
                    isrThread.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

            try {
                if (outThread != null)
                    outThread.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

            try {
                if (inThread != null)
                    inThread.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }

}

 

以上是关于使用InputStreamReader读入,使用OutputStreamWriter写出,将一首诗按行重写?的主要内容,如果未能解决你的问题,请参考以下文章

JavaI/O:使用InputStreamReader和BufferedReade实现控制器输入输出

JavaI/O:使用InputStreamReader和BufferedReade实现控制器输入输出

scanner--inputstreamreader--console对比

BufferedReader 和 InputStreamReader 是不是应该显式关闭?

I/O流任务

读入一个文件输出每个字母的频率