黑马程序员技术交流社区

标题: Arrays.sort(arr)arr为字符数组不排序,求指点 [打印本页]

作者: Alan    时间: 2013-4-24 13:38
标题: Arrays.sort(arr)arr为字符数组不排序,求指点
本帖最后由 Alan 于 2013-4-24 15:08 编辑

public class Text5 {

public static void main(String[] args) throws IOException
{
  FileReader fr = new FileReader("a.txt");//文件内容ahkhsdfsadfasf
  FileWriter fw = new FileWriter("b.txt");
  char[] arr = new char[1024];  
  fr.read(arr);
  Arrays.sort(arr);System.out.print(arr);
  
  fw.write(arr);
  fr.close();
  fw.close();
  
}
//fr.read(arr);确定已经读出文件
//System.out.print(arr);没有数据   ??求指点
作者: 肖川    时间: 2013-4-24 13:50
  1. import java.io.FileReader;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.util.Arrays;

  5. public class ArraysDemo {

  6.         public static void main(String[] args) throws IOException
  7.         {
  8.           FileReader fr = new FileReader("a.txt");
  9.           FileWriter fw = new FileWriter("b.txt");
  10.           char[] arr = new char[1024];  
  11.           while ((fr.read(arr)) != -1)
  12.           {
  13.                   Arrays.sort(arr);
  14.                   System.out.print(arr);
  15.           }  
  16.           fw.write(arr);
  17.           fr.close();
  18.           fw.close();
  19.           
  20.         }
  21. }
复制代码

作者: Miss小强    时间: 2013-4-24 13:56
肖川 发表于 2013-4-24 13:50

楼上的说的很对;事情要一步一步的做;
没读完,就先不要排序吧;
作者: wangyougu010    时间: 2013-4-24 13:57
char[] arr = new char[1024];
fr.read(arr);
Arrays.sort(arr);
System.out.print(arr);
你这几行代码是要实现什么呢?在读取文件时,自定义一个数组,每次读文件读一个给定数组大小的数据,数组里面存储的是字节数据,也就是说,比如你要读取的文件里面的内容是"abc",而数组的长度是1,那么每次从文件读取了一个字节的数据,你调用Arrays.sort(arr);是把这个字节给排序了,当然会出现乱码,举个简单的例子,一个中文占两个字节,你用其中一个字节来排序,能得到一个正常的结果吗?当然不会的.在读文件的时候,对这个数组进行排序是没有意义的
作者: 山西_李帅    时间: 2013-4-24 14:56
楼主,给你一个思路,如果你想把一个数组写进去,起码你得遍厉一下吧,在遍厉的过程中,你遍厉一个元素然后往里面写一个。这样才有意义。你要是不明白我把代码给你贴上来,现在用手机上的,不方便
作者: 山西_李帅    时间: 2013-4-24 14:57
楼主,给你一个思路,如果你想把一个数组写进去,起码你得遍厉一下吧,在遍厉的过程中,你遍厉一个元素然后往里面写一个。这样才有意义。你要是不明白我把代码给你贴上来,现在用手机上的,不方便
作者: Alan    时间: 2013-4-24 15:02
Miss小强 发表于 2013-4-24 13:56
楼上的说的很对;事情要一步一步的做;
没读完,就先不要排序吧;

都读进数组了啊
作者: Alan    时间: 2013-4-24 15:07
自己已经发现问题   程序没有问题,就是在Arrays.sort(arr);排序的时候,默认空字符也参加排序,导致生成的b。txt文件前面都是空字符,有效的字符在后面,所以没有看见
作者: 胡帅冰    时间: 2013-4-24 15:23
本帖最后由 胡帅冰 于 2013-4-24 15:28 编辑
  1. package A;

  2. import java.io.FileReader;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.Arrays;

  6. public class Text5 {

  7. public static void main(String[] args) throws IOException
  8. {
  9.   FileReader fr = new FileReader("E:\\a.txt");//文件内容ahkhsdfsadfasf
  10.   FileWriter fw = new FileWriter("E:\\b.txt");
  11.   char[] arr = new char[10];  //read读取的数据没那么大,一般都是一个字符,没必要把数组的长度定义那么长
  12.   while (fr.read(arr)!=-1)//这是循环,用来一个一个的读取文件中的数据  因为read方法不能一次性的读取。
  13.   {
  14.          
  15.           Arrays.sort(arr);//排序
  16.           for(int i=0;i<arr.length;i++)//for循环来读取数组中的数据
  17.           {
  18.           System.out.print(arr[i]);
  19.           }
  20.           fw.write(arr);
  21.   }
  22.   fr.close();
  23.   fw.close();
  24. }
  25. }
复制代码
这个是我运行出来的,跟你要的效果是一样的。
你在读取文件数据的时候,fr.read(arr);并不能一次性全部读出,你需要一个循环来读取a文件中的数据。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2