在java中写入文件时遇到问题

在java中写入文件时遇到问题,java,writer,Java,Writer,嘿,我试图写一个文件,但我得到了一个错误的一行,它写的行,进入一个文本文件的每一行,不能找出任何帮助将不胜感激 编写器代码 public static void stuIDWrite()引发IOException { Writer=null; 试一试{ writer=new BufferedWriter(new OutputStreamWriter( 新文件输出流(“Res/stuIDSorted.txt”); }捕获(IOEX异常){ //报告 }最后{ 尝试{writer.close();

嘿,我试图写一个文件,但我得到了一个错误的一行,它写的行,进入一个文本文件的每一行,不能找出任何帮助将不胜感激 编写器代码

public static void stuIDWrite()引发IOException
{
Writer=null;
试一试{
writer=new BufferedWriter(new OutputStreamWriter(
新文件输出流(“Res/stuIDSorted.txt”);
}捕获(IOEX异常){
//报告
}最后{
尝试{writer.close();}catch(Exception ex){}
}
int i=0;

虽然(i好,但以下是您应该做的:

发生的情况是,您在它实际能够做任何事情之前就关闭了它。因此,让我们将您的finally子句移到所有事情的末尾:

public static void stuIDWrite() throws IOException
 {
     Writer writer = null;

 try {
     writer = new BufferedWriter(new OutputStreamWriter(
       new FileOutputStream("Res/stuIDSorted.txt")));

 int i = 0;

while (i <= stuArrayIdSort.length + 1)
{
    ln = stuArrayIdSort[i].getStuLastName();    
    fn = stuArrayIdSort[i].getStuFirstName();
    pn = stuArrayIdSort[i].getStuFirstName();
    id = stuArrayIdSort[i].getStuId();
    ft = stuArrayIdSort[i].getFTime();
    phn =stuArrayIdSort[i].getPhoneNum();
    lj = stuArrayIdSort[i].getLovJava();
    con = stuArrayIdSort[i].getCont();
        writer.write(ln + "," + fn + "," + pn  + ","+ id + "," + ft + "," + phn + "," + lj + "," + con + "\n");
        i++;    
}
} catch (IOException ex) {
   // report
  } finally {
try {writer.close();} catch (Exception ex) {}
 }
public static void stuIDWrite()引发IOException
{
Writer=null;
试一试{
writer=new BufferedWriter(new OutputStreamWriter(
新文件输出流(“Res/stuIDSorted.txt”);
int i=0;

虽然(我我不确定你是否理解try…catch…最终是如何工作的。以下是你所拥有的:

     Writer writer = null;

     try {
         writer = new BufferedWriter(new OutputStreamWriter(
               new FileOutputStream("Res/stuIDSorted.txt")));
     } catch (IOException ex) {
       // report
     } finally {
    >>>>>>>  **try {writer.close();} catch (Exception ex) {}**
     }
     int i = 0;

        while (i <= stuArrayIdSort.length + 1)
        {
           //bunch of stuff
                writer.write(...);
    >>>>>>>    **writer.close();**
                i++;    
        }
 }
Writer=null;
试一试{
writer=new BufferedWriter(new OutputStreamWriter(
新文件输出流(“Res/stuIDSorted.txt”);
}捕获(IOEX异常){
//报告
}最后{
>>>>>>>**尝试{writer.close();}捕获(异常值){}**
}
int i=0;
而(i>>>**writer.close()**
i++;
}
}
在使用writer之前(在try块之后执行finally块)关闭writer一次,在循环中关闭一次。因此,如果代码能够以某种方式通过finally块中的writer.close(),它将不会多次通过循环


不必关闭一个缓冲的写入器。类确保在内部关闭它。

< P>如果您使用java 7,您可能需要考虑使用语法,这样可以在这样的情况下大大简化文件处理的正确实现。您的原始代码有一些问题,但即使是被接受的答案也有一些问题。我相信在无法打开(未验证)文件的情况下,将导致
NullPointerException

我认为您的while循环边界条件也可能存在一些问题。我已将
while
循环更改为更传统的
for
循环。请记住,java数组元素的运行范围为
0
array.length-1

  public static void stuIDWrite() throws IOException
  {
    try (FileWriter writer = new FileWriter("Res/stuIDSorted.txt"))
    {
      for (int i = 0; i < stuArrayIdSort.length; ++i)
      {
        ln = stuArrayIdSort[i].getStuLastName();
        fn = stuArrayIdSort[i].getStuFirstName();
        pn = stuArrayIdSort[i].getStuFirstName();
        id = stuArrayIdSort[i].getStuId();
        ft = stuArrayIdSort[i].getFTime();
        phn = stuArrayIdSort[i].getPhoneNum();
        lj = stuArrayIdSort[i].getLovJava();
        con = stuArrayIdSort[i].getCont();
        writer.write(ln + "," + fn + "," + pn + "," + id + "," + ft + "," + phn + "," + lj + "," + con + "\n");
      }
    }
  }
public static void stuIDWrite()引发IOException
{
try(FileWriter=newfilewriter(“Res/stuisorted.txt”))
{
对于(int i=0;i

您还可以考虑使用内部循环的语法,这可能会进一步简化工作。

很抱歉线程“main”java.io.IOException中的错误异常:流在java.io.BufferedWriter.ensureOpen(未知源)在java.io.BufferedWriter.write(未知源)在java.io.Writer.write(未知源)关闭在StudentMain.stuidswrite(StudentMain.java:152)中,将writer.close函数调用移出stuidswrite函数中的while循环。您正在调用
writer.close()
首先,然后尝试写入流。为什么它不应该抱怨呢?尝试发布具有精确问题点的代码。感谢将wirter.close移到while循环之外,但我仍然在writer上收到IO异常错误。写入(ln+,“+fn+,”+pn+,“+id+”,“+ft+,“+phn+,“+lj+,“+con+”\n”);您仍在关闭while循环中的writer。这不起作用。@mttdbrd不,我没有..再看一次:PYup。它就在那里,在while循环中:writer.close();哈哈,很抱歉没有看到这一点-这只是从上面复制的代码。我正在注意最后一行。我将删除这一行
     Writer writer = null;

     try {
         writer = new BufferedWriter(new OutputStreamWriter(
               new FileOutputStream("Res/stuIDSorted.txt")));
     } catch (IOException ex) {
       // report
     } finally {
    >>>>>>>  **try {writer.close();} catch (Exception ex) {}**
     }
     int i = 0;

        while (i <= stuArrayIdSort.length + 1)
        {
           //bunch of stuff
                writer.write(...);
    >>>>>>>    **writer.close();**
                i++;    
        }
 }
  public static void stuIDWrite() throws IOException
  {
    try (FileWriter writer = new FileWriter("Res/stuIDSorted.txt"))
    {
      for (int i = 0; i < stuArrayIdSort.length; ++i)
      {
        ln = stuArrayIdSort[i].getStuLastName();
        fn = stuArrayIdSort[i].getStuFirstName();
        pn = stuArrayIdSort[i].getStuFirstName();
        id = stuArrayIdSort[i].getStuId();
        ft = stuArrayIdSort[i].getFTime();
        phn = stuArrayIdSort[i].getPhoneNum();
        lj = stuArrayIdSort[i].getLovJava();
        con = stuArrayIdSort[i].getCont();
        writer.write(ln + "," + fn + "," + pn + "," + id + "," + ft + "," + phn + "," + lj + "," + con + "\n");
      }
    }
  }