public class ReaderAndWriterDemo {
  public static void main(String[] args) {
    Collection <Integer>list=new ArrayList<Integer>();
try {
DataInputStream input = new DataInputStream(new FileInputStream("d:\\FileDemo1.txt")); 
     DataOutputStream output = new DataOutputStream(new FileOutputStream("e:\\FileDemo1.txt"));
int m=input.readInt();
  while(m!=-1)
list.add(Integer.valueOf(m));
    input.close(); 
  Object a[]=list.toArray();
     Arrays.sort(a); 
     Iterator <Integer> itr=list.iterator();
         if(itr.hasNext()){
          int x=(int)itr.next();
         output.writeInt(x);
         }
      output.close();
  } catch (Exception e) {
   e.printStackTrace();
}
      }
       }
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.Integer.valueOf(Integer.java:585)
at com.xyd.java.lesson12.ReaderAndWriterDemo.main(ReaderAndWriterDemo.java:18)(list.add(Integer.valueOf(m));

解决方案 »

  1.   

    java中的Error jvm虚拟机是无能为力
      

  2.   

    d:\\FileDemo1.txt可能文件里内容过大。。
      

  3.   

     while(m!=-1) 
    list.add(Integer.valueOf(m)); 
    有个死循环在这一直给list添加数据,所以会堆栈溢出。
    你的本意是不是下面这样?
    while(m!=-1){
    int m=input.readInt(); 
    list.add(Integer.valueOf(m)); 
    }
      

  4.   

    while(m!=-1) 
    list.add(Integer.valueOf(m)); 
    经鉴定这个语句外面好像还该有个什么东东。 但是什么呢?不知道
      

  5.   

    就是这个问题,是我太大意了!大家说的对,出现死循环了!不过改了又有下面这个异常了:
    java.io.EOFException
    at java.io.DataInputStream.readInt(DataInputStream.java:375)
    at com.xyd.java.lesson12.ReaderAndWriterDemo.main(ReaderAndWriterDemo.java:19)
      

  6.   

    看不到你改了以后的代码,不清楚19行的代码是啥。
    出现End Of File异常,应该是读到文件尾了但你还在读,有可能是程序设计有误,不过有些读写操作方法就是以EOFException判断是否到达文件尾的。
    另外:同意9楼的说法,请自己多检查、思考,实在没办法时再提问,绝对有益。
      

  7.   

    应该是这样,就不会出现 EOFException 了。int m;try {
        while (true) {
            m = input.readInt();
            list.add(m); // auto boxing
        }
    } catch (EOFException e) {
        /* do nothing */
    } finally {
        try {
            input.close();
        } catch (IOException) { /* can do nothing */ }
    }我猜楼主是想用 while (m != EOF) 但是 Java 中没有这个东西。DataInputStream 用 EOFException 表示 EOF 的情况。如果楼主确实想把不等于 -1 这个数字的 int 放进 list 里,那么用
    while ((m = input.readInt()) != -1)
    代替上面的 while (true) m = input.readInt 即可。