您现在的位置是:首页 > 文章详情

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

日期:2018-06-07点击:354

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

 

将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的大门即将被打开。
原文链接:https://yq.aliyun.com/articles/638177
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章