code: private void extractCharacterFilesFromJar(URL urlCharacters) throws IOException {
  		JarURLConnection		connection = (JarURLConnection)urlCharacters.openConnection();
  		ZipInputStream		in = null;
  		ZipEntry				zipEntry = null;
  		String					basePath = connection.getJarEntry().getName();
  		byte[]					buff = new byte[1024 * 1024];
  		int						size;
  		
  		try {
  			in = new ZipInputStream(new FileInputStream(connection.getJarFile().getName()));
  			
  			while ((zipEntry = in.getNextEntry()) != null) {
  				if ((!zipEntry.getName().startsWith(basePath)) || (zipEntry.getName().length() <= basePath.length())) {
  					continue;
  				}
  				
  				FileOutputStream		out = null;
  				String					fileName = zipEntry.getName().substring(basePath.length());
  				
  				try {
  					out = new FileOutputStream("characters/" + fileName);
  					
  					while (0 < (size = in.read(buff))) {
  						out.write(buff, 0, size);
  					}
  				} catch (Exception e) {
  					continue;
  				} finally {
  					try {
  						in.closeEntry();
  					} catch (IOException e2) {}
  					if (out != null) {
  						try {
  							out.close();
  						} catch (IOException e2) {}
  					}
  				}
  			}
  		} finally {
  			if (in != null) {
  				try {
  					in.close();
  				} catch (IOException e) {}
  			}
  		}
  	}
docs: TODO リファクタ