我正在开发一个将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'?
答案 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
- 它可以是Reader
,FileReader
- 您的图书馆无需关心。
您的图书馆可以像现在一样继续从InputStreamReader
构建CsvIterator
。
对于测试,您可以传递Reader
。在生产代码中,调用者可以从文件,套接字,标准输入中生成StringReader
- 无论喜欢什么。