Java 从文件到文件程序的写入
我试图制作一个程序,从database.txt中读取一行,并将奇数/偶数行写入文件1.txt和2.txt。F.e.database.txt的第一行(奇数)转到1.txt,database.txt的第二行(偶数)转到2.txt 这是我到目前为止得到的代码:Java 从文件到文件程序的写入,java,file,loops,Java,File,Loops,我试图制作一个程序,从database.txt中读取一行,并将奇数/偶数行写入文件1.txt和2.txt。F.e.database.txt的第一行(奇数)转到1.txt,database.txt的第二行(偶数)转到2.txt 这是我到目前为止得到的代码: import java.io.*; import java.util.Scanner; public class Main { public Main(){ op(null); } public v
import java.io.*;
import java.util.Scanner;
public class Main {
public Main(){
op(null);
}
public void op(String args[]){
try{
FileReader fr = new FileReader("database.txt");
BufferedReader reader = new BufferedReader(fr);
String line = reader.readLine();
Scanner scan = null;
int ln = 1;
String even = "2txt";
String odd = "1.txt";
while ((line=reader.readLine())!=null){
scan = new Scanner(line);
if(ln%2==0){
wtf(even, line);
}else{
wtf(odd, line);
}
ln++;
line=reader.readLine();
}
reader.close();
}
catch (FileNotFoundException e){
System.out.println("File not found");
}
catch (IOException e) {
System.out.println("Impossibru to read");
}
}
public void wtf(String filename, String ltw){
try
{
FileReader fr = new FileReader(filename);
BufferedReader reader = new BufferedReader(fr);
String line = reader.readLine();
FileWriter writer = new FileWriter(filename);
BufferedWriter bw = new BufferedWriter(writer);
while(line==null){
bw.write(ltw);
bw.newLine();
}
bw.close();
}
catch ( IOException e)
{
}
}
}
目前,它在一个无限循环中只读取第2行,并将其垃圾邮件发送到1.txt您没有增加行数
while (line!=null){
scan = new Scanner(line);
if(ln%2==0){
wtf(even, line);
ln++;
}else{
wtf(odd, line);
ln++;
line=reader.readLine();
}
}
reader.close();
}
您没有增加行数
while (line!=null){
scan = new Scanner(line);
if(ln%2==0){
wtf(even, line);
ln++;
}else{
wtf(odd, line);
ln++;
line=reader.readLine();
}
}
reader.close();
}
在下列范围内:
if(ln%2==0)
块,您还需要添加ln++代码>
同时移动
line=reader.readLine();
直接在else块外
作为一种替代方法,这是一种有点重复的方法:
删除所有line=reader.readLine()代码>s包括第一个
将循环重写为:
while ((line=reader.readLine())!=null){
if(ln%2==0){
wtf(even, line);
}else{
wtf(odd, line);
}
ln++;
}
在下列范围内:
if(ln%2==0)
块,您还需要添加ln++代码>
同时移动
line=reader.readLine();
直接在else块外
作为一种替代方法,这是一种有点重复的方法:
删除所有line=reader.readLine()代码>s包括第一个
将循环重写为:
while ((line=reader.readLine())!=null){
if(ln%2==0){
wtf(even, line);
}else{
wtf(odd, line);
}
ln++;
}
你的无限循环发生在这里:
if(ln%2==0)
wtf(even, line);
ln
从0开始0%X=0
,因此它总是被认为是一个偶数
数,而你只需将垃圾邮件发送到同一行即可。将增量添加到偶数子句中
有趣的旁注
还有一个无限循环,因为如果值为偶数或0,则永远不会读取下一行
解决方案
if(ln%2==0){
wtf(even, line);
ln ++;
line = reader.readline();
你的无限循环发生在这里:
if(ln%2==0)
wtf(even, line);
ln
从0开始0%X=0
,因此它总是被认为是一个偶数
数,而你只需将垃圾邮件发送到同一行即可。将增量添加到偶数子句中
有趣的旁注
还有一个无限循环,因为如果值为偶数或0,则永远不会读取下一行
解决方案
if(ln%2==0){
wtf(even, line);
ln ++;
line = reader.readline();
更新:
while((line=reader.readLine())!=null){
*
*
*
line=reader.readLine() ; //is this line required ?
在wtf()中也检查此项
更新:
while((line=reader.readLine())!=null){
*
*
*
line=reader.readLine() ; //is this line required ?
在wtf()中也检查此项
问题在于wtf方法。当你写的时候,你的无休止的循环就在那里:
while(line==null){
bw.write(ltw);
bw.newLine();
}
BufferedReader声明,如果到达流的结尾,它将返回null。
由于文件最初是空的(我假设),这将一直是真的,并且您将继续编写新行和字符串
我在玩弄你的代码,然后把它重写成这样
import java.util.*;
import java.io.*;
public class fread {
public static void main (String[] args) {
Scanner scan = new Scanner(System.in);
String even = "2.txt";
String odd = "1.txt";
String line = "";
int lineNumber = 0;
while (scan.hasNext() )
{
line = scan.nextLine();
if (lineNumber++ % 2 == 1)
writeText(even, line);
else
writeText(odd, line);
}
}
static void writeText(String filename, String ltw)
{
try
{
BufferedWriter bw = new BufferedWriter(new FileWriter(filename, true));
bw.write(ltw);
bw.newLine();
bw.close();
}
catch ( IOException e)
{
e.printStackTrace();
}
}
}
它使用输入重定向,因此键入javafread
将为您提供结果,但这只会附加到文件中。如果您的文件不存在,或者最初是空的,这将按照您的预期工作。您必须根据程序的需要指定此代码。无论如何,您应该能够使用我的writeText方法,并将其合并到您的程序中,以使您的工作正常。问题在于wtf方法。当你写的时候,你的无休止的循环就在那里:
while(line==null){
bw.write(ltw);
bw.newLine();
}
BufferedReader声明,如果到达流的结尾,它将返回null。
由于文件最初是空的(我假设),这将一直是真的,并且您将继续编写新行和字符串
我在玩弄你的代码,然后把它重写成这样
import java.util.*;
import java.io.*;
public class fread {
public static void main (String[] args) {
Scanner scan = new Scanner(System.in);
String even = "2.txt";
String odd = "1.txt";
String line = "";
int lineNumber = 0;
while (scan.hasNext() )
{
line = scan.nextLine();
if (lineNumber++ % 2 == 1)
writeText(even, line);
else
writeText(odd, line);
}
}
static void writeText(String filename, String ltw)
{
try
{
BufferedWriter bw = new BufferedWriter(new FileWriter(filename, true));
bw.write(ltw);
bw.newLine();
bw.close();
}
catch ( IOException e)
{
e.printStackTrace();
}
}
}
它使用输入重定向,因此键入javafread
将为您提供结果,但这只会附加到文件中。如果您的文件不存在,或者最初是空的,这将按照您的预期工作。您必须根据程序的需要指定此代码。无论如何,您应该能够使用我的writeText方法并将其合并到您的程序中,以使您的程序能够正常工作。奇怪的是,我认为我们都在这里。。两个无限循环。一个功能。这本身就是一个成就。奇怪的是,我认为我们都在这里。。两个无限循环。一个功能。这本身就是一个成就。是的,很抱歉:if(ln%2==0){wtf(偶数,行);它最初是使用ln++;line=reader.readLine();但现在我有另一个问题。它现在将第二行垃圾邮件发送到1.txtYes,很抱歉:if(ln%2==0){wtf(偶数,行);最初是使用ln++;line=reader.readLine();但现在我有另一个问题。它现在将第2行垃圾处理为1。TXT我尝试将int-ln从1更改为0和2。在0上,它甚至没有从2开始,它与2类似,所以我认为问题不在于ln,很抱歉:if(ln%2==0){wtf(偶数,line);它最初是用ln++;line=reader.readLine();但现在我有另一个问题。它现在将第二行垃圾处理为1。TXT我不认为是你:)我只是想知道为什么有人会这样做。我尝试将int ln从1更改为0和2。在0上它甚至没有在2上开始,它像在2上一样进行,所以我认为问题不在于ln,很抱歉:if(ln%2==0){wtf(偶,line);它最初是用ln++;line=reader.readLine();但现在我有另一个问题。它现在将第二行垃圾发送到1.txt。我不认为是你:)我只是想知道为什么有人会这样做。多次尝试交换ln++并没有真正的帮助,同样的结果。我需要这一行跳转到下一行并阅读它。我有一种预感,它不是正确的代码。>。多次尝试交换ln++都没有效果我觉得这不是正确的代码。我发现一个问题…你有这行:String line=reader.readLine();
从文本中读取第一行,然后这行:while((line=reader.readLine())!=null){
读取第二行。这将完全跳过第一行。另外,文件名不是2.txt
?您的循环是在