java怎么把内容用文本输出6_在java中的类中将输出写入文本文件?

本问题已经有最佳答案,请猛点这里访问。

我有一个将输出写入文本文件的问题。我不太确定该怎么做。我试图通过沿着-writer行编写一些内容来编写输出,这是printwriter类的一个对象:

这是大幅削减,但归根结底是。

Writer.println(sortRI());

我不能将该语句作为方法本身来编写——我试图为其编写输出文件的此类中的所有方法都是无效的。

所以我的问题是,如何从无效的方法中将输出写入文本文件——它们通过几个打印语句打印出结果。有没有一种方法可以实例化一个编写器并使用编写器打印方法?其中一种方法的示例如下所示:

zipcodelocation[]data2=新的zipcodelocation[];

public class Processor

{

...

public void readData(){

...

}

public void findSpringfield()

{

System.out.println("------------------------------------------------------------------------");

System.out.println("SPRINGFIELD ZIP CODES");

for(int i=0; i < data2.length ; i++)

{

if(data2[i].getpostalCity().replaceAll(""","").contains("SPRINGFIELD"))

{

System.out.println(data2[i].getzipCode().replaceAll(""",""));  //Prints out zipCodes that have Springfield in them

}

}

}

我怎么能让它把这个方法的输出写到一个文本文件中,而不是在控制台中将消息打印到system.out?

有人有主意吗?可以使用一些输入。

您已经问了一个非常好的问题,因为它描述了所有软件通用的设计考虑的一个实例。

这里的主题是业务逻辑与接口的分离。更一般地说,它是对面向对象程序中定义明确的职责的讨论。

理想情况下,您的业务逻辑将返回一个数据结构,它允许调用者对结果执行任何需要的操作,比如将结果写入文件或在网页中显示。

public List findSpringfield()

{

List results = new ArrayList();

for(int i=0; i < data2.length ; i++) {

if(data2[i].getpostalCity().contains("SPRINGFIELD")) {

results.add(data2[i].getzipCode().replaceAll(""",""));  //Collects zipCodes that have Springfield in them

}

}

return results;

}

如果这不是一个选项,那么至少要修改方法以接受printstream参数。

public void findSpringfield(PrintStream out)

{

out.println("------------------------------------------------------------------------");

out.println("SPRINGFIELD ZIP CODES");

for(int i=0; i < data2.length ; i++) {

if(data2[i].getpostalCity().contains("SPRINGFIELD")) {

out.println(data2[i].getzipCode().replaceAll(""",""));  //Prints out zipCodes that have Springfield in them

}

}

}

你可以这样称呼它

findSpringfield(System.out);

或者您可以将它传递给与System.out不同的printstream实例,后者指向您自己的文件。

最后,如果以上两个选项都不适用于您,我将告诉您如何做一些非常糟糕的做法。您可以将System.out重定向到您选择的文件。正如我所说,这是一个可怕的想法;在非常有限的范围内,将它作为最后的手段。

System.out = new PrintStream("somePath/someFile.txt");

此外,作为设计改进,考虑将findspringfield方法归纳为接受字符串postalcity参数,以便可以重用它来查找其他城市的邮政编码。

public List zipsByCity(String postalCity)

{

// use postalCity to filter results, rather than hardcoded"SPRINGFIELD" string

}

抱歉,我刚注意到这一点,给了你长久应得的认可!

File file = new File("out.txt");

BufferedWriter output = new BufferedWriter(new FileWriter(file));

for(int i=0; i < data2.length ; i++){

if(data2[i].getpostalCity().replaceAll(""","").contains("SPRINGFIELD")){

output.write(data2[i].getzipCode().replaceAll(""",""));

}

}

output.close();

这应该有效,但它需要一个try-catch块或throw声明

尝试将writer作为参数发送到方法,而不是打印到方法内部的标准输出,而是打印到writer:

public void findSpringfield(FileWriter writer)

{

writer.println("---------------------------------------------------                                               ---------------------");

writer.println("SPRINGFIELD ZIP CODES");

for(int i=0; i < data2.length ; i++)

{

if(data2[i].getpostalCity().replaceAll(""","").contains("SPRINGFIELD"))

{

writer.println(data2[i].getzipCode().replaceAll(""",""));               //Prints out zipCodes that have Springfield in them

}

}

现在看来,每个方法都必须实现对文件的写入或将文件编写器作为参数。这两种方法都会奏效,但都是非常无用的。

根据我从你的问题中了解到的,你将拥有更多的叫做findxyz的无效方法。

为什么不写方法void findtown(string townname)?我可能是错的,或者对你想要达到的目标有错误的印象,但是如果我是对的,那么你就走错了方向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值