Revision 43283 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProvider.java
CSVStoreProvider.java | ||
---|---|---|
23 | 23 |
package org.gvsig.fmap.dal.store.csv; |
24 | 24 |
|
25 | 25 |
import java.io.File; |
26 |
import java.io.FileInputStream; |
|
27 |
import java.io.FileNotFoundException; |
|
26 | 28 |
import java.io.FileReader; |
27 | 29 |
import java.io.FileWriter; |
28 | 30 |
import java.io.IOException; |
31 |
import java.io.InputStreamReader; |
|
29 | 32 |
import java.net.URL; |
30 |
import java.text.SimpleDateFormat;
|
|
33 |
import java.nio.charset.Charset;
|
|
31 | 34 |
import java.util.ArrayList; |
32 | 35 |
import java.util.HashMap; |
33 | 36 |
import java.util.Iterator; |
... | ... | |
746 | 749 |
logger.warn("Can't set geometry type for the calculated field in CSV file '" + getFullFileName() + "'.", e); |
747 | 750 |
} |
748 | 751 |
} |
752 |
|
|
753 |
String geometry_column = CSVStoreParameters.getGeometryColumn(this.getParameters()); |
|
754 |
if( !StringUtils.isEmpty(geometry_column) ) { |
|
755 |
EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) fType.get(geometry_column); |
|
756 |
if( attr!=null && attr.getType()!=DataTypes.GEOMETRY ) { |
|
757 |
attr.setDataType(DataTypes.GEOMETRY); |
|
758 |
GeometryManager geommgr = GeometryLocator.getGeometryManager(); |
|
759 |
GeometryType gt; |
|
760 |
try { |
|
761 |
gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.UNKNOWN); |
|
762 |
attr.setGeometryType(gt); |
|
763 |
} catch (Exception e) { |
|
764 |
logger.warn("Can't set geometry type for the calculated field in CSV file '" + getFullFileName() + "'.", e); |
|
765 |
} |
|
766 |
fType.setDefaultGeometryAttributeName(geometry_column); |
|
767 |
} |
|
768 |
} |
|
749 | 769 |
return fType; |
750 | 770 |
} |
751 | 771 |
|
... | ... | |
889 | 909 |
|
890 | 910 |
} |
891 | 911 |
|
892 |
private SimpleReader getSimpleReader(FileReader in) {
|
|
912 |
private SimpleReader getSimpleReader(InputStreamReader in) {
|
|
893 | 913 |
SimpleReader reader; |
894 | 914 |
if (CSVStoreParameters.getRawFieldsDefinition(getCSVParameters()) != null) { |
895 | 915 |
reader = new FixedLenReader(in, getCSVParameters()); |
... | ... | |
917 | 937 |
return headers; |
918 | 938 |
} |
919 | 939 |
|
940 |
private InputStreamReader openFile(File f, String charsetName) throws FileNotFoundException { |
|
941 |
Charset charset = Charset.defaultCharset(); |
|
942 |
FileInputStream fis = new FileInputStream(f); |
|
943 |
if( !StringUtils.isEmpty(charsetName) ) { |
|
944 |
if( Charset.isSupported(charsetName) ) { |
|
945 |
try { |
|
946 |
charset = Charset.forName(charsetName); |
|
947 |
} catch(Throwable th) { |
|
948 |
logger.warn("Can't use charset '"+charsetName+"' for read csv '"+this.getFullFileName()+"'.", th); |
|
949 |
} |
|
950 |
} else { |
|
951 |
logger.warn("charset '"+charsetName+"' not supported for read csv '"+this.getFullFileName()+"'."); |
|
952 |
} |
|
953 |
} |
|
954 |
InputStreamReader isr = new InputStreamReader(fis, charset); |
|
955 |
return isr; |
|
956 |
} |
|
957 |
|
|
920 | 958 |
private void loadFeatures() { |
921 |
FileReader in = null;
|
|
959 |
InputStreamReader in = null;
|
|
922 | 960 |
SimpleReader reader = null; |
923 | 961 |
try { |
924 | 962 |
String headers[] = null; |
... | ... | |
926 | 964 |
|
927 | 965 |
boolean ignore_errors = CSVStoreParameters.getIgnoreErrors(getCSVParameters()); |
928 | 966 |
|
929 |
in = new FileReader(this.getCSVParameters().getFile()); |
|
967 |
in = openFile( |
|
968 |
this.getCSVParameters().getFile(), |
|
969 |
CSVStoreParameters.getCharset(this.getCSVParameters()) |
|
970 |
); |
|
930 | 971 |
|
931 | 972 |
reader = getSimpleReader(in); |
932 | 973 |
|
Also available in: Unified diff