将文件内容作为方法参数传递(例如字符串)

时间:2017-04-24 12:02:57

标签: java apache-commons java-io

我正在开发一个将File作为InputStreamReader

的库
   Reader fileReader = new InputStreamReader(new FileInputStream(new File("inputFile"),"UTF-8");

instances.addThruPipe(new CsvIterator(fileReader, Pattern
                .compile("^(\\S*)[\\s,]*(\\S*)[\\s,]*(.*)$"), 3, 2, 1));

我有另一种方法可以在“inputFile”文件中创建数据(一个标签分隔一个)。

是否可以完全摆脱物理文件创建过程并将文件作为参数传递?

String source = "This is the source of my input stream";
InputStream in = IOUtils.toInputStream(source, "UTF-8");

如果我可以使用上述方法,在创建此类字符串时如何处理'\ t'和'\ n'?

2 个答案:

答案 0 :(得分:4)

您正在将字符串源保存到文件中,所以为什么不直接传递String而不是创建文件并传递文件

答案 1 :(得分:0)

我建议您将API设为export default class PlaytestsIndex extends React.Component { constructor (props, context) { super(props, context); this._onPlaytestStoreChange = this._onPlaytestStoreChange.bind(this); this.state = { playtests: PlaytestStore.getActivePlaytests() }; } componentDidMount () { PlaytestStore.addChangeListener(this._onPlaytestStoreChange); } componentWillUnmount () { PlaytestStore.addChangeListener(this._onPlaytestStoreChange); } _onPlaytestStoreChange () { this.setState({ playtests: PlaytestStore.getActivePlaytests() }); } render () { const playtests = this.state.playtests; if (playtests.length === 0) { return ( <table className="table table-fixed content-section"> <tbody> <tr className="disabled"> <td className="no-results center">No playtests found</td> </tr> </tbody> </table> ) }; const today = Moment().minute(0).hour(0).second(0).millisecond(0); // how the groups of playtests are sorted const sortOrderLabels = [ 'Currently Active', 'Upcoming' ]; const timelineDateRows = _.chain(playtests) .groupBy((playtest) => { const startsOn = Moment(playtest._startsOnDateTime).minute(0).hour(0).second(0).millisecond(0); if (today.isAfter(startsOn) || today.isSame(startsOn, 'day')) { return 0; } return 1; }) .toPairs() // [[idx, playtests], ...] .sortBy((paired) => paired[0]) // by idx .map((paired) => { const [idx, playtests] = paired; return (<TimelineDateRow key={sortOrderLabels[idx]} label={sortOrderLabels[idx]} playtests={playtests}/>); }) .value(); return ( <div> {timelineDateRows} </div> ); } } 作为输入参数。

现在调用者有责任创建Reader - 它可以是ReaderFileReader - 您的图书馆无需关心。

您的图书馆可以像现在一样继续从InputStreamReader构建CsvIterator

对于测试,您可以传递Reader。在生产代码中,调用者可以从文件,套接字,标准输入中生成StringReader - 无论喜欢什么。