具体来说,我设法创建(可能)一个程序,该程序读入文件并在每个段落的开头放置一个缩进。问题是,在我将字符计数器打印到输出文件之前,现在我绝对没有打印到输出文件。但是,Java表示它已经从外部来源进行了修改。我曾经能够在JGrasp IDE中查看文件更改。我有什么明显的东西可以忽略吗?
这是代码......以防它是我的代码:
public class ReadFile
{
static Scanner inFile;
static PrintWriter outFile;
public static void main(String[] args) throws IOException
{
String inputString;
final String indent = " ";
inFile = new Scanner(new FileReader("History.d1"));
outFile = new PrintWriter(new FileWriter("History.d2"));
inputString = indent + inFile.nextLine();
outFile.println(inputString);
while (inFile.hasNextLine())
{
inputString = inFile.nextLine();
}
if (inputString.length() < 1)
{
outFile.print("/n");
}
else if (inputString.length() > 0)
{
inputString = indent + inputString;
}
outFile.println(inputString);
}
}
答案 0 :(得分:0)
无论何时外部修改已在IDE *中打开的文件,系统都会要求您重新加载该文件。在Eclipse中,可以通过按F5按钮来完成。这将刷新文件显示并进行更改。
在刷新文件后,如果显示正确的信息,则不会在问题中说明。我认为您遇到的问题是您在控制台视图中使用文件显示视图实时显示文本。
如果您将输出打印操作从System.out.println
语句更改为outFile.println
,则表示输出已发送到指定的文件,而不是控制台。如果要验证输出确实正在打印,可以在System.out.println(inputString)
语句之前或之后包含outFile.println(inputString)
。
另外,正如mazaneicha所建议的,当你完成close()
和inFile
时,最好在outFile
和{{1}}上执行{{1}}方法。尽管Java垃圾收集会自动关闭这些连接,但它仍然是一个养成习惯的好主意。
*适用于Eclipse和Netbeans
答案 1 :(得分:0)
您至少需要刷新编写器,最后添加:
outFile.flush();
还记得在完成后关闭流:
outFile.close();
答案 2 :(得分:0)
这段代码将使inFile读取器一直读到文件的末尾,绕过if / else代码块。我不认为你的意思是在while循环中只有这一行。
while (inFile.hasNextLine())
{
inputString = inFile.nextLine();
}
答案 3 :(得分:0)
新行字符是'\ n',而不是'/ n'。以下是一些可能符合您要求的代码:
try(BufferedReader inFile = new BufferedReader(new FileReader("History.d1")); BufferedWriter outFile = new BufferedWriter(new FileWriter("History.d2"))){
String inputString;
final String indent = " ";
while ((inputString=inFile.readLine())!=null)
{
if (inputString.length() < 1)
{
outFile.write("\n");
}
else if (inputString.length() > 0)
{
inputString = indent + inputString;
outFile.write(inputString);
}
}
}