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

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

改善后: (可将不管一行有几个字时的不规律的文本,按行倒写)

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 Poem{

    public static void main(String[] args) {

        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<String> one = getDataInt(isr);
            ArrayList<String> two = getList(one);

            for (String x : two) {
                System.out.print(x);
                osw.write(x);
            }

        } 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();
                }

            }
        }
    }

    

    public static ArrayList<String> getDataInt(InputStreamReader isr) {
        ArrayList<String> dataStrList = new ArrayList<>();
        int data = 0;
        String dataStr = "";
        char c;
        String chineseLine = "";
        try {
            while ((data = isr.read()) != -1) {
                dataStr += data + "";
                c = (char) data;
                chineseLine += c;
                if (dataStr.endsWith("1310")) {
                    dataStrList.add(chineseLine);
                    dataStr = "";
                    chineseLine = "";
                }
            } // while_END
            chineseLine += "\n";
            dataStrList.add(chineseLine);
            // 如果诗和词是一整行 或者 遇到最后一行没有回车换行表示,就存入

        } catch (

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

    ///

    public static ArrayList<String> getList(ArrayList<String> one) {
        int w;
        String poem = null;
        ArrayList<String> cutes = new ArrayList<>();

        int dataIndex = one.size() - 1;
        for (w = dataIndex; w >= 0; w--) {
            poem = one.get(w);
            cutes.add(poem);
        }

        return cutes;
    }

}

 

初版(只能针对五言绝句)

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 += "\n";// 假设为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();
            }

        }

    }

}

 

将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的大门即将被打开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值