FileReader错误/不需要的输出,当读取两个文件并在Java中写入一个文件时

时间:2013-09-27 14:24:12

标签: java filereader shuffle

我想要实现的是读取两个文件,随机化每个文件中字符串的顺序,然后将它们一起添加到一个新的空白文件中。我能够读取文件并将它们随机化,但是当将两个文件组合在一起时,我会在字符串之后收到不需要的输出,例如: NAME1java.io.FileReader @ 78ef430bCOMPANY2java.io.FileReader @ d80ba6ff

(显然我不想要的部分是 java.io.FileReader@d80ba6ff 部分,@之后的字符总是随机的)

我似乎只读了每个文件的一行

这是我将文件合并在一起的主要方法

ReadFiles obj = new ReadFiles();
    obj.loadCompanies();
    obj.loadTitles();

    FileReader fCompany=new FileReader("F:\\company2.txt");
    FileReader fTitle=new FileReader("F:\\title2.txt");
    BufferedReader br1 = new BufferedReader(fCompany);
    BufferedReader br2 = new BufferedReader(fTitle);

    String tempCompany = null, tempTitle = null;

    while(br1.readLine() != null)
    {
    tempCompany = br1.readLine()+ fCompany;
    }
    while(br2.readLine()!=null)
    {
    tempTitle = br2.readLine() + fTitle;
    }
    String tempFile = tempCompany + ", " + tempTitle;

    FileWriter fw = new FileWriter("F:\\companyTitleCombined.txt");
    char buffer[] = new char[tempFile.length()];
    tempFile.getChars(0,tempFile.length(),buffer,0);
    fw.write(buffer);
    fCompany.close();
    fTitle.close();
    fw.close();

也是我的随机文件方法之一

public void loadCompanies(){

String[] strArr = new String[10];
int i = 0;

Scanner readInformation = null;

    try {       
        readInformation = new Scanner(new File("F:\\company.txt"));  
        PrintStream out = new PrintStream(new FileOutputStream("F:\\company2.txt"));
        System.setOut(out);
    } catch (Exception e) {
        System.out.println("Could not locate the data file!");
    }

    while(readInformation.hasNext()) {
        strArr[i] = readInformation.next();
        int rand = (int) Math.floor(strArr.length * Math.random());


        System.out.println(strArr[rand]);
        i++;
    }
    readInformation.close();
}

任何可以帮助我摆脱这些不需要的输出的帮助都将非常感激!

感谢您的时间。

输出示例:

文件1: 名1 NAME2 NAME3

文件2: 公司1 Company2的 公司3

随机化File1 + File2 = File3:

的组合

name3,company2

name1,company1

name2,company3

1 个答案:

答案 0 :(得分:1)

您确实阅读了所有行,但您只将最后一行存储在变量中。 表单tempCompany = br1.readLine()+ fCompany;的每个分配都会丢弃先前的tempCompany值。 + fCompany部分也没有意义,它将FileReader(即“java.io.FileReader@d80ba6ff”)的字符串表示添加到该行,而您的帖子则不需要它;你应该把它删除。

由于您要对所有行执行某些操作,因此应将它们存储在列表中。 在String tempCompany = null, tempTitle = null;添加

之前
List<String> companies = new ArrayList<String>();
List<String> titles = new ArrayList<String>();

将循环更改为:

tempCompany = br1.readLine();
while(tempCompany != null)
{
    companies.add(tempCompany);
    tempCompany = br1.readLine();
}

tempTitle = br2.readLine();
while(tempTitle != null)
{
    titles.add(tempTitle);
    tempTitle = br1.readLine();
}

现在您需要随机播放两个列表:

Collections.shuffle(companies);
Collections.shuffle(titles);

对于您想要的输出,您需要确保列表长度相等。 此外,您的输入文件似乎没有按换行符分隔,而是按空格分隔,因此readLine可能无法提供您想要的内容。如果是这种情况,则必须使用split中的String - 方法或移至类似StreamTokenizer的内容。

之后,您可以编写输出文件。只需从两个列表中连接相等索引的字符串。