我正在创建一个Web应用程序,允许上传形状文件,以便稍后在程序中使用。我希望能够将上传的shapefile读入内存并从中提取一些信息,而无需对磁盘进行任何显式写入。我正在使用的框架(play-framework)在上传文件时自动将临时文件写入磁盘,但它很好地为我创建和删除了所述文件。但是,这个文件没有任何扩展名,所以通过Geotools读取shapefile的传统方法就像这样
public void readInShpAndDoStuff(File the_upload){
Map<String, Serializable> map = new HashMap<>();
map.put( "url", the_upload.toURI().toURL() );
DataStore dataStore = DataStoreFinder.getDataStore( map );
}
失败并出现状态
的异常NAME_OF_TMP_FILE_HERE is not one of the files types that is known to be associated with a shapefile
在查看Geotools的源代码后,我看到通过查看文件扩展名来检查文件类型,因为这是一个tmp文件,所以没有。 (运行file FILENAME
表示操作系统将此文件识别为shapefile。)
所以最后我的问题是,有没有办法在没有指定Url的情况下读取shapefile?一些函数或构造函数,它将File对象作为参数并且不依赖于路径?或者是太麻烦了,我应该只在磁盘上保存一份?后一个选项不是首选,因为这可能会在某个时刻在VM服务器上运行,我不想处理文件系统特定的东西。
提前感谢您的帮助!
答案 0 :(得分:1)
我看不出这对你有什么影响,一个shapefile(尽管它的名字)是一组3个(或更多)文件,它们共享一个基本名称,扩展名为.shp,.dbf,.sbx (通常是.prj,.sbn,.fix,.qix等)。
是否有某种方法可以使用临时文件名来编写扩展名?