| /* |
| * Copyright 2014 The Apache Software Foundation. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package opennlp.addons.geoentitylinker.indexing; |
| |
| import java.io.BufferedOutputStream; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.OutputStream; |
| import java.net.URL; |
| import java.util.Enumeration; |
| import java.util.zip.ZipEntry; |
| import java.util.zip.ZipFile; |
| |
| public class GeonamesFileDownloader { |
| |
| final static int size = 1024; |
| private static final String ALL_COUNTRIES = "http://download.geonames.org/export/dump/ZM.zip"; |
| private static final String COUNTRY_INFO = ""; |
| private static final String ADM1_LOOKUP = ""; |
| |
| public static void main(String[] args) { |
| downloadGeonamesFiles(COUNTRY_INFO, "c:\\temp\\gazetteers"); |
| } |
| |
| public static void downloadGeonamesFiles(String outputFileName, String outputDir) { |
| String fileDownload = fileDownload(ALL_COUNTRIES, outputDir); |
| |
| unzipMyZip(fileDownload, outputDir); |
| |
| fileDownload(COUNTRY_INFO, outputDir); |
| fileDownload(ADM1_LOOKUP, outputDir); |
| |
| } |
| |
| public static void writeFile(InputStream in, OutputStream out) |
| throws IOException { |
| byte[] buffer = new byte[1024]; |
| int len; |
| |
| while ((len = in.read(buffer)) != 0) { |
| out.write(buffer, 0, len); |
| } |
| |
| in.close(); |
| out.close(); |
| } |
| |
| public static void unzipMyZip(String zipFileName, String directoryToExtractTo) { |
| Enumeration<? extends ZipEntry> entriesEnum; |
| ZipFile zip; |
| try { |
| zip = new ZipFile(zipFileName); |
| entriesEnum = zip.entries(); |
| while (entriesEnum.hasMoreElements()) { |
| ZipEntry entry = entriesEnum.nextElement(); |
| InputStream is = zip.getInputStream(entry); // get the input stream |
| OutputStream os = new FileOutputStream(zipFileName.replace("\\.zip", ".txt")); |
| byte[] buf = new byte[4096]; |
| int r; |
| while ((r = is.read(buf)) != -1) { |
| os.write(buf, 0, r); |
| } |
| os.close(); |
| is.close(); |
| } |
| } catch (IOException ioe) { |
| System.err.println("Some Exception Occurred:"); |
| ioe.printStackTrace(); |
| } |
| } |
| |
| public static String fileUrl(String fAddress, String localFileName, String destDir) { |
| String filename = destDir + "\\" + localFileName; |
| try (InputStream is = new URL(fAddress).openConnection().getInputStream(); |
| OutputStream outStream = new BufferedOutputStream(new FileOutputStream(destDir + "\\" + localFileName))) { |
| |
| byte[] buf = new byte[size]; |
| int byteRead, byteWritten = 0; |
| while ((byteRead = is.read(buf)) != -1) { |
| outStream.write(buf, 0, byteRead); |
| byteWritten += byteRead; |
| } |
| System.out.println("Downloaded Successfully."); |
| System.out.println("File name:\"" + localFileName + "\"\nNo ofbytes :" + byteWritten); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| return filename; |
| } |
| |
| public static String fileDownload(String fAddress, String destinationDir) { |
| int slashIndex = fAddress.lastIndexOf('/'); |
| int periodIndex = fAddress.lastIndexOf('.'); |
| |
| String fileName = fAddress.substring(slashIndex + 1); |
| String retFileName = ""; |
| if (periodIndex >= 1 && slashIndex >= 0 |
| && slashIndex < fAddress.length() - 1) { |
| retFileName = fileUrl(fAddress, fileName, destinationDir); |
| } else { |
| System.err.println("path or file name."); |
| } |
| return retFileName; |
| } |
| |
| } |