我有一个我正在处理的程序,我在将一个字符串写入我的文件时遇到了问题。该文件已创建,但应写入其中的字符串值最终不会被写入。根据Eclipse没有语法错误,所以我认为这是一个语义错误。
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();
}
}
答案 0 :(得分:3)
我强烈怀疑你是否记录了异常 - 你应该改进你的异常处理,但是如果你 要记录异常,你真的需要在事情发生时查看日志工作!
这几乎肯定是问题所在:
fWriter = new FileWriter(f);
String content = attribute;
BufferedWriter output = new BufferedWriter(new FileWriter(f));
您正在为同一个文件创建两个FileWriter
。第一个存在将阻止第二个被正确创建。
但是,还有很多其他要点需要注意:
FileWriter
始终使用平台默认编码。我更喜欢明确指定编码,通常是UTF-8。FileWriter
(或FileOutputStream
)已经创建了该文件(如果该文件不存在),因此您的createFile
方法毫无意义(除非您确实需要检查该文件以前存在)finally
块中关闭流资源,或在Java 7中使用try-with-resources语句。尽管如此,库可以使更多这类事情变得更简单。我会使用Guava将您的整个代码重写为:
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());
}
}
答案 1 :(得分:1)
如果attribute = txt.getText();
为空,则不会在文件中写入任何内容。
否则呢。
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 reader = new BufferedReader(new StringReader(content));
答案 2 :(得分:1)
txt.getText();
可能是空的。
然而,JavaDoc也警告过这一点,关于createNewFile:
当且仅当具有此名称的文件尚不存在时,以原子方式创建一个由此抽象路径名命名的新空文件。
答案 3 :(得分:1)
输入此代码。它可以帮助您将一个文件复制到另一个文件,并只复制文件中的文件。
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();
}
}
答案 4 :(得分:0)
你真正需要的是:
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();
}