A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宗士为 中级黑马   /  2012-5-14 08:43  /  2016 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//2.将day19-笔记.txt中的所有行反转(第一行换到最后一行, 第二行换到倒数第二行)
public class Exercise2 {

        public static void main(String[] args) throws IOException {
                BufferedReader br = new BufferedReader(new FileReader("day19-笔记.txt"));
                List<String> list = new ArrayList<String>();
                String line;
                while((line = br.readLine()) != null)
                        list.add(line);
                br.close();
               
                BufferedWriter w = new BufferedWriter(new FileWriter("invertday19.txt"));
                for(int i = list.size() - 1; i >= 0; i--)
                        w.write(i);
                w.close();
        }
}

"day19-笔记.txt"是个文档文件   ,通过要求我写了代码   但是编译过后invertday19.txt出现了乱码
检查了10分种  也没看出问题   大哥大姐帮看看

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
兄弟,我没有按照你的ArrayList做的,我用LinkList做的。
import java.io.*;
import java.util.*;

public class Exercise2 {

         public static void main(String[] args) throws IOException {
                 
                 File f=new File("e:\\a.txt");
                 if(!f.exists())
                         f.createNewFile();
                 
         BufferedReader br = new BufferedReader(new FileReader(f));
         LinkedList<String> list = new LinkedList<String>();
         String line=null;
         while((line = br.readLine()) != null)
                 list.addFirst(line);
         br.close();
         
         BufferedWriter w = new BufferedWriter(new FileWriter("e:\\b.txt"));
       /*  for(int i = list.size() - 1; i >= 0; i--)
                 w.write(i);*/
         
           for(String s:list)
           {  
                   w.write(s);
                   w.newLine();
           }
           
           
         w.close();
}

}
回复 使用道具 举报
本帖最后由 赵玮_Tom 于 2012-5-14 09:51 编辑

程序已经修改完毕,并进行了标注:(流关联的文件已经做了改动,但不影响程序执行)
import java.io.*;
import java.util.*;
//2.将day19-笔记.txt中的所有行反转(第一行换到最后一行, 第二行换到倒数第二行)
public class Exercise2
{
public static void main(String[] args) throws IOException
{
  BufferedReader br = new BufferedReader(new FileReader("Exercise2.java"));
  List<String> list = new ArrayList<String>();
  String line;
  while((line = br.readLine()) != null)
    list.add(line);
  br.close();
  
  BufferedWriter w = new BufferedWriter(new FileWriter("dddddd.txt"));
  /*
  //此处已经把集合和数组的操作弄混!!!
  for(int i = list.size() - 1; i >= 0; i--)
    w.write(i);
  w.close();
  */

  Object [] strs = list.toArray();//将集合转为数组!
  for(int i=strs.length-1; i>=0; i--)
  {
   w.write((String)strs); //Object类型转为String
   w.newLine(); //必须换行
  }
  w.close();
}
}

原程序的主要问题在于将集合和数组的操作弄混!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
  1. import java.util.*;
  2. import java.io.*;
  3. class InvertFile
  4. {
  5.         public static void main(String []args) throws IOException
  6.         {
  7.                 File file=new File("Peaches.java");
  8.                 invert(file);
  9.         }
  10.         private static void invert(File file)throws IOException
  11.         {
  12.                 BufferedReader br=new BufferedReader(new FileReader(file));
  13.                 List<String> list=new ArrayList<String>();
  14.                 String line=null;
  15.                 int j=1;
  16.                 while((line=br.readLine())!=null)
  17.                 {
  18.                         System.out.println(j+++":"+line);
  19.                         list.add(line);
  20.                 }
  21.                 br.close();

  22.                 System.out.println(list.size());
  23.                 BufferedWriter bw=new BufferedWriter(new FileWriter("invertPeaches.java"));
  24.                 PrintWriter pw=new PrintWriter(bw,true);
  25.                 for(int i=list.size()-1;i>=0;i--)
  26.                 {
  27.                         if(i==0)
  28.                         {
  29.                                 pw.print(list.get(i));
  30.                         }
  31.                         else
  32.                                 pw.println(list.get(i));
  33.                 }
  34.                 pw.close();
  35.         }
  36. }
复制代码
你程序中的主要错误是在循环中写入的不是集合中存放的内容,你用list.get(i)取出i位置的内容再写入新的文件中就可以了,写入一行文件用PrintWriter来装饰BufferedWriter更方便,楼上两位兄弟的代码在执行后会在新的文件中多出一行空行,与楼主要求不合。另外2楼说将集合和数组的操作弄混不怎么恰当,集合本身就是一个动态数组。另外用LinkedList效率比ArrayList要高,但就楼主这道题而言无所谓,因为不会牵涉到数组元素的移动。。。还不懂的话加Q聊,282713672

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
w.write(list.get(i));
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马