Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用geotools读取shapefile而不指定文件的url?_Java_Playframework_Gis_Geotools - Fatal编程技术网

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

Java 是否可以使用geotools读取shapefile而不指定文件的url?,java,playframework,gis,geotools,Java,Playframework,Gis,Geotools,我正在创建一个web应用程序,它将允许上传形状文件,以便稍后在程序中使用。我希望能够将上传的shapefile读取到内存中,并从中提取一些信息,而无需对磁盘进行任何显式写入。我使用的框架(play framework)在上传文件时会自动将临时文件写入磁盘,但它可以很好地为我处理所述文件的创建和删除。但是,该文件没有任何扩展名,因此通过Geotools读取形状文件的传统方法如下 public void readInShpAndDoStuff(File the_upload){ Map&l

我正在创建一个web应用程序,它将允许上传形状文件,以便稍后在程序中使用。我希望能够将上传的shapefile读取到内存中,并从中提取一些信息,而无需对磁盘进行任何显式写入。我使用的框架(play framework)在上传文件时会自动将临时文件写入磁盘,但它可以很好地为我处理所述文件的创建和删除。但是,该文件没有任何扩展名,因此通过Geotools读取形状文件的传统方法如下

public void readInShpAndDoStuff(File the_upload){
     Map<String, Serializable> map = new HashMap<>();
     map.put( "url", the_upload.toURI().toURL() );

     DataStore dataStore = DataStoreFinder.getDataStore( map );
}
在查看Geotools的源代码后,我看到通过查看文件扩展名来检查文件类型,因为这是一个tmp文件,所以它没有。(运行
file FILENAME
显示操作系统将此文件识别为一个shapefile)

最后我的问题是,有没有一种方法可以在不指定Url的情况下读取shapefile?以文件对象为参数且不依赖路径的函数或构造函数?还是太麻烦了,我应该在磁盘上保存一个副本?后一个选项并不可取,因为它可能在某个时候在VM服务器上运行,我不想处理特定于文件系统的东西


提前感谢您的帮助

我看不出这对您有什么作用,shapefile(尽管它的名称)是一组3个(或更多)文件,它们共享一个basename,扩展名为.shp、.dbf、.sbx(通常是.prj、.sbn、.fix、.qix等)


有没有办法让play用临时文件名编写扩展名?

是的,我很害怕。我能做的就是创建一个符号链接到具有正确扩展名的文件。这是一个黑客,但它的工作。在我接受之前,我会等着看其他人是否有好的想法。
NAME_OF_TMP_FILE_HERE is not one of the files types that is known to be associated with a shapefile