是否可以使用geotools读取shapefile而不指定文件的URL?

时间:2015-05-21 14:13:35

标签: java playframework gis geotools

我正在创建一个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服务器上运行,我不想处理文件系统特定的东西。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我看不出这对你有什么影响,一个shapefile(尽管它的名字)是一组3个(或更多)文件,它们共享一个基本名称,扩展名为.shp,.dbf,.sbx (通常是.prj,.sbn,.fix,.qix等)。

是否有某种方法可以使用临时文件名来编写扩展名?