0

我想要实现的是读取两个文件,随机化每个文件中字符串的顺序,然后将它们一起添加到一个新的空白文件中。我能够读取文件并将它们随机化,但是当将两个文件组合在一起时,我会在字符串之后收到不需要的输出,例如: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 名称 2 名称3

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

随机 File1 + File2 = File3 的组合:

名称 3,公司 2

名称 1,公司 1

名称 2,公司 3

4

1 回答 1

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-method fromString或移动到类似StreamTokenizer.

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

于 2013-09-27T15:26:48.863 回答