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));
)
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));
)
list.add(Integer.valueOf(m));
有个死循环在这一直给list添加数据,所以会堆栈溢出。
你的本意是不是下面这样?
while(m!=-1){
int m=input.readInt();
list.add(Integer.valueOf(m));
}
list.add(Integer.valueOf(m));
经鉴定这个语句外面好像还该有个什么东东。 但是什么呢?不知道
java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at com.xyd.java.lesson12.ReaderAndWriterDemo.main(ReaderAndWriterDemo.java:19)
出现End Of File异常,应该是读到文件尾了但你还在读,有可能是程序设计有误,不过有些读写操作方法就是以EOFException判断是否到达文件尾的。
另外:同意9楼的说法,请自己多检查、思考,实在没办法时再提问,绝对有益。
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 即可。