Java 为什么没有任何东西写入我的文件?
我有一个程序,我正在工作,我有一个问题写入字符串到我的文件。文件已创建,但最终不会写入应写入其中的字符串值。根据Eclipse,没有语法错误,所以我认为这是一个语义错误Java 为什么没有任何东西写入我的文件?,java,file,output,filewriter,bufferedwriter,Java,File,Output,Filewriter,Bufferedwriter,我有一个程序,我正在工作,我有一个问题写入字符串到我的文件。文件已创建,但最终不会写入应写入其中的字符串值。根据Eclipse,没有语法错误,所以我认为这是一个语义错误 public boolean createFile() { try { f = new File("house.txt"); if(!f.exists()) { f.createNewFile(); exists =
public boolean createFile()
{
try
{
f = new File("house.txt");
if(!f.exists())
{
f.createNewFile();
exists = true;
}
else
exists = false;
}
catch(IOException e)
{
e.printStackTrace();
}
return exists;
}
这就是创建文件的方法。
下一个是实际写入已成功创建的文件的方法。该操作源自一个JButton,按下该按钮时,应执行以下操作:
if(evt.getActionCommand().equals("CONFIRM"))
{
attribute = txt.getText();
try
{
createFile();
fWriter = new FileWriter(f);
String content = attribute;
BufferedWriter output = new BufferedWriter(new FileWriter(f));
output.write(content);
output.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
如果
attribute=txt.getText()代码>为空,它不会向文件写入任何内容
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class Reader {
public static String reverse(String s)
{
String str= new String("");
for(int i=s.length()-1;i>=0;i--)
{
str+=s.charAt(i);
}
return str;
}
public static void main(String[] args) throws Exception {
//File m=new File("C:\\bg/newfile.txt");
int count=0;
FileReader f=new FileReader("C:\\bg/newfile.txt");
FileWriter fa=new FileWriter("C:\\bg/newfile1.txt");
BufferedReader bf=new BufferedReader(f);
BufferedWriter br=new BufferedWriter(fa);
String line=bf.readLine();
//String li=br.newLine();
while(line!=null)
{
String[] sa=line.split(" ");
for(String a:sa)
{
if(a.equals(reverse(a)))
{
System.out.println(a);
br.write(a);
br.newLine();
count++;
}
//System.out.println(count+""+a);
}
//br.newLine();
line=bf.readLine();
}
bf.close();
br.close();
}
}
否则,我会这样做
if(evt.getActionCommand().equals("CONFIRM"))
{
attribute = txt.getText();
try
{
createFile();
fWriter = new FileWriter(f);
String content = attribute;
BufferedWriter output = new BufferedWriter(new FileWriter(f));
output.write(content);
output.flush();
output.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
或者添加stringReader:BufferedReader=new BufferedReader(new stringReader(content))代码>txt.getText()代码>可能为空
不过,JavaDoc还警告createNewFile:
当且仅当具有此名称的文件尚不存在时,以原子方式创建一个以此抽象路径名命名的新空文件
我强烈怀疑您正在记录异常-无论如何,您应该改进您的异常处理,但是如果您要记录异常,那么当事情不起作用时,您确实需要查看日志
这几乎肯定是问题所在:
fWriter = new FileWriter(f);
String content = attribute;
BufferedWriter output = new BufferedWriter(new FileWriter(f));
您正在为同一个文件创建两个FileWriter
s。第一个的存在将阻止第二个被正确创造
但是,您还需要注意以下几点:
FileWriter
始终使用平台默认编码。我更喜欢显式地指定编码,通常是UTF-8
- 如果文件不存在,则创建新的
FileWriter
(或FileOutputStream
)已创建该文件,因此createFile
方法毫无意义(除非您确实需要检查该文件以前是否存在)
- 您应该始终在
finally
块中关闭流资源,或者在Java 7中使用try with resources语句
不过,库可以使这类事情简单得多。我会将您的整个代码重写为:
if (evt.getActionCommand().equals("CONFIRM")) {
Files.write(txt.getText(), new File("house.txt"), StandardCharsets.UTF_8);
}
声明您的方法可以抛出IOException
,如果您确实想在方法中处理它,则可以捕获它
如果确实要手动执行此操作,请执行以下操作:
if (evt.getActionCommand().equals("CONFIRM")) {
try (Writer writer = new OutputStreamWriter(
new FileOutputStream("house.txt"), StandardCharsets.UTF_8)) {
writer.write(txt.getText());
}
}
您真正需要的是:
try {
BufferedWriter output = new BufferedWriter(new FileWriter(new File("house.txt")));
output.write(txt.getText());
output.close();
} catch (IOException e)
{
e.printStackTrace();
}
如果house.txt
不存在,则将创建它。如果txt.getText()
返回一个字符串,它将被写入house.txt
我还建议尽可能使用try-with-resources语句,在try块退出后为您关闭流
try (BufferedWriter output = new BufferedWriter(new FileWriter(new File("house.txt")))){
output.write(txt.getText());
}
catch (IOException e) {
e.printStackTrace();
}
输入此代码。它将帮助您将一个文件复制到另一个文件,并且只复制文件中的回文
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class Reader {
public static String reverse(String s)
{
String str= new String("");
for(int i=s.length()-1;i>=0;i--)
{
str+=s.charAt(i);
}
return str;
}
public static void main(String[] args) throws Exception {
//File m=new File("C:\\bg/newfile.txt");
int count=0;
FileReader f=new FileReader("C:\\bg/newfile.txt");
FileWriter fa=new FileWriter("C:\\bg/newfile1.txt");
BufferedReader bf=new BufferedReader(f);
BufferedWriter br=new BufferedWriter(fa);
String line=bf.readLine();
//String li=br.newLine();
while(line!=null)
{
String[] sa=line.split(" ");
for(String a:sa)
{
if(a.equals(reverse(a)))
{
System.out.println(a);
br.write(a);
br.newLine();
count++;
}
//System.out.println(count+""+a);
}
//br.newLine();
line=bf.readLine();
}
bf.close();
br.close();
}
}
我强烈怀疑您得到了一个异常,应该打印到控制台。(顺便说一句,这不是一个很好的异常处理)看看这里。请注意,您当前正在尝试为同一个文件创建两个FileWriter
对象。。。这不太可能起作用。@user503413:不需要关闭调用-尽管这应该在finally块中,或者使用try-with-resources。还要注意,您根本不需要使用File.createNewFile()
。创建FileWriter
将在必要时创建该文件。@user3324895:我什么时候说过您不需要调用close?我说如果你调用close,你不需要调用flush。在@user2864740的辩护中:我想你也说过同样的话,JonSkeet。他在一篇评论中说,他尝试了一个手动创建的字符串,但仍然没有写入。我还刚刚注释掉了createFile()的方法调用,其中包含.createNewFile(),考虑到上面某个人的建议,他建议FileWriter无论如何都会创建文件。还是没什么。嗯,我很确定这应该会起作用,还有其他一些已经发布的解决方案。我开始认为这是我的ActionListener的问题。基本上,单击jbuttonadd将打开一个带有JComboBox的窗口,在选择一个选项表单时,JComboBox将打开一个带有文本字段和“确认”按钮的新框架。这两个按钮的ActionListener使用相同的方法。这可能与问题有关吗?很抱歉,我从未使用过Swing,因此我无法在这方面为您提供太多帮助,我将检查此代码是否正在执行,以及txt.getText()是否返回一个非空字符串。代码执行良好,并且在任何情况下都不会崩溃,因此问题不是语法性的。但是谢谢你。这里绝对没有必要开始使用StringReader
——你认为这会有什么好处?您传播了最初的问题,即创建两个FileWriter
s。OP声明即使将txt.getText()
更改为“abc”,问题仍然存在,所以这肯定不是问题所在。是的,但我在那之前写过答案。所以你发现了真正的问题。或者在我看到回复之前:-)