在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");
}
}
}