Java 为什么使用geotools读取shapefile的代码会引发此异常?
我正在使用geotools 10.1从shapefile读取属性。 我不明白为什么在“打印所有功能”属性之后抛出异常 以下是示例代码:Java 为什么使用geotools读取shapefile的代码会引发此异常?,java,geotools,Java,Geotools,我正在使用geotools 10.1从shapefile读取属性。 我不明白为什么在“打印所有功能”属性之后抛出异常 以下是示例代码: import java.io.File; import java.io.IOException; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import org.geotools.data.DataStore; import org.geotools
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.FeatureSource;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator;
import org.opengis.feature.simple.SimpleFeature;
public class LayerBusinessTest {
public static void main(String[] args) throws IOException {
File file = new File("../../setup/test/shp/sscc/SSCC2010_WGS84.shp");
Map<String, Serializable> map = new HashMap<>();
map.put( "url", file.toURI().toURL() );
DataStore dataStore = DataStoreFinder.getDataStore( map );
String typeName = dataStore.getTypeNames()[0];
FeatureSource source = dataStore.getFeatureSource( typeName );
FeatureCollection collection = source.getFeatures();
FeatureIterator<SimpleFeature> results = collection.features();
try {
while (results.hasNext()) {
SimpleFeature feature = (SimpleFeature) results.next();
String code = feature.getAttribute("Codigo_SSC").toString();
System.out.println( code );
}
} finally {
results.close();
}
}
必须执行
dataStore.dispose()代码>退出前。我收到了同样的错误。如何解决?`@sharif Read answer标记为correct.to add,每当我访问这样的shapefile时,我都会添加一个finally块来调用dispose(),即使您使用的是Java 7+try with resources。这很有趣,因为我使用的是旧版本(15.1),这不是必需的。但是当我切换到20.0时,我开始得到OP的错误。谢谢angelcervera!
Exception in thread "main" java.lang.IllegalArgumentException: Expected requestor org.geotools.data.shapefile.dbf.DbaseFileReader@2ac9b619 to have locked the url but it does not hold the lock for the URL
at org.geotools.data.shapefile.files.ShpFiles.unlockRead(ShpFiles.java:429)
at org.geotools.data.shapefile.files.FileChannelDecorator.implCloseChannel(FileChannelDecorator.java:149)
at java.nio.channels.spi.AbstractInterruptibleChannel.close(AbstractInterruptibleChannel.java:115)
at org.geotools.data.shapefile.dbf.DbaseFileReader.close(DbaseFileReader.java:279)
at org.geotools.data.shapefile.ShapefileFeatureReader.close(ShapefileFeatureReader.java:248)
at org.geotools.data.store.ContentFeatureCollection$WrappingFeatureIterator.close(ContentFeatureCollection.java:154)
at LayerBusinessTest.main(LayerBusinessTest.java:39)