Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文件到文件程序的写入_Java_File_Loops - Fatal编程技术网

Java 从文件到文件程序的写入

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

我试图制作一个程序,从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 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
?您的循环是在