我想要实现的是读取两个文件,随机化每个文件中字符串的顺序,然后将它们一起添加到一个新的空白文件中。我能够读取文件并将它们随机化,但是当将两个文件组合在一起时,我会在字符串之后收到不需要的输出,例如: 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
答案 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
的内容。
之后,您可以编写输出文件。只需从两个列表中连接相等索引的字符串。