看到的好多资料是,在加载语料库的时候是直接给定某个路径下的文件,比如:
SentenceIterator iter = new LineSentenceIterator(new File("/Users/cvn/Desktop/file.txt"));
但是,我现在需要在springboot下用multipartfile来传入,不想把路径直接写死,想让用户随便选择分好词的文件,部分代码如下:
public train(MultipartFile source_file, MultipartFile des_file,Integer m1,Integer m2,Integer m3,Integer m4,Integer m5) throws IOException {
SentenceIterator iter = new LineSentenceIterator(new File(source_file.getOriginalFilename()));
getOriginalFilename()---该方法有个提示是:This may contain path information depending on the browser used,but it typically will not with any other than Opera.
所以,在测试的时候IE浏览器显示了盘符,运行正常,但是谷歌浏览器加载文件只是显示了文件名,就一直报错:"Please specify an existing file"
看了下源代码,这是没有找到还是没转换成file的意思??
public LineSentenceIterator(File f) {
if (!f.exists() || !f.isFile())
throw new IllegalArgumentException("Please specify an existing file");
try {
this.f = f;
this.file = new BufferedInputStream(new FileInputStream(f));
iter = IOUtils.lineIterator(this.file, "UTF-8");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
后面看到有人解答的简书链接,之前有看到过,本觉得用不上,后来再看一遍,到提示了我,可以换个能够接受String类型的方法,刚好有个Collection类,虽然可以保留Multipartfile,但是目标文件不方便处理,所以最后还是全部换成了File类型,然后前端改为input type="text",由用户直接输入文件路径。