0

伙计们。我正在尝试从堆栈中写入文件。堆栈是通过从另一个文件中读取来创建的。我正在使用堆栈,以便可以反转我读入的文件。要读取和写入的文件名来自命令行。这就是我实现堆栈的方式:

while(read.hasNext()) {
stack.push(read.next());}

堆栈应该写入的我的另一个文件的代码:

FileWriter w = null;
        try {
            w = new FileWriter(new File(args[1]));
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (!stack.isEmpty()) { //this was a while statement
            try {
                w.write(stack.pop());
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("Didn't make it.");
        }

我遇到的问题是当我运行我的程序时,创建了我要写入的文件,但没有写入文件。我最初认为我的堆栈中没有任何内容(这就是为什么我将 while 语句更改为 if;它是临时的)。“没有成功”。没有打印,所以我现在知道不是那样的。我在这里做错了什么?任何帮助表示赞赏。

4

2 回答 2

2

w.write(stack.pop());之后 调用 fush() 方法:

w.write(stack.pop());
w.flush();

你可以返回while语句。最后调用w.close();

于 2013-09-14T07:56:59.127 回答
1

如果您在声明时没有像这样指定,则方法 stack.pop 将返回一个 Object Stack<String> stack = new Stack<String>();

写完后你应该使用w.flush(),你也应该使用w.close.

例如,您应该将 while 语句本身嵌套到 try 块中

try {
  while(!stack.isEmpty()) {
    w.write(stack.pop()); // assuming you have declared it as Stack<E>
  }
  w.flush();
  w.close();
 } catch(IOException e) {
   e.printStackTrace();
 }

编辑:

完成后FileWriter关闭它,它必须嵌套在 try catch 块中以捕获任何IOException抛出的内容。如果您w.write()在 while 循环内的 try catch 块中使用该方法,那么在while循环迭代结束后,您必须构建另一个 try catch 来放置w.close()

于 2013-09-14T08:06:40.480 回答