📄 webdavconnection.java
字号:
catch(Exception ex) { Log.debug("ERROR: parsing problem with:" + files[i]); size[i] = "-1"; perms[i] = FtpConnection.DENIED; continue; } */ Log.out("sortLs files[" + i + "]: " + files[i]); //size[i] = "" + (int) f[i].length(); size[i] = "" + (int) f[i].getGetContentLength(); perms[i] = FtpConnection.R; if(f[i].isCollection() && !files[i].endsWith("/")) { files[i] = files[i] + "/"; } /* if(f[i].canWrite()) accessible = FtpConnection.W; else if(f[i].canRead()) accessible = FtpConnection.R; else accessible = FtpConnection.DENIED; perms[i] = accessible; Log.out("sortLs files["+i+"]: " + files[i]); WebdavFile f2 = new WebdavFile(new URL(files[i]), user, pass); if(!f2.exists()) continue; if(f2.isDirectory() && !files[i].endsWith("/")) files[i] = files[i] + "/"; size[i] = "" + new WebdavFile(new URL(files[i]), user, pass).length(); */ } return files; } catch(Exception ex) { Log.debug("Error: " + ex.toString()); ex.printStackTrace(); return new String[0]; } } public String[] sortSize(String file) { return size; } public int[] getPermissions(String file) { return perms; } public int handleDownload(String file) { transfer(file); return 0; } public int handleUpload(String file) { transfer(file, true); return 0; } public int download(String file) { transfer(file); return 0; } public int upload(String file) { transfer(file, true); return 0; } private void transferDir(String dir, String out) { try { fileCount = 0; shortProgress = true; baseFile = StringUtils.getDir(dir); WebdavFile f2 = new WebdavFile(getURL(dir)); String[] tmp = f2.list(); if(tmp == null) { return; } WebdavFile fx = new WebdavFile(getURL(out)); if(!fx.mkdir()) { Log.debug("Can not create directory: " + out + " - already exist or permission denied?"); } for(int i = 0; i < tmp.length; i++) { tmp[i] = tmp[i].replace('\\', '/'); //System.out.println("1: " + dir+tmp[i] + ", " + out +tmp[i]); WebdavFile f3 = new WebdavFile(getURL(dir + tmp[i])); if(f3.isDirectory()) { if(!tmp[i].endsWith("/")) { tmp[i] = tmp[i] + "/"; } transferDir(dir + tmp[i], out + tmp[i]); } else { fireProgressUpdate(baseFile, DataConnection.GETDIR + ":" + fileCount, -1); work(dir + tmp[i], out + tmp[i]); } } fireProgressUpdate(baseFile, DataConnection.DFINISHED + ":" + fileCount, -1); shortProgress = false; } catch(Exception ex) { Log.debug("Error: " + ex.toString()); ex.printStackTrace(); } } private HttpURL getURL(String u) { try { HttpURL url = new HttpURL(u); //System.out.println(user + ":"+ pass); url.setUserinfo(user, pass); return url; } catch(Exception ex) { ex.printStackTrace(); Log.debug("ERROR: " + ex); return null; } } private WebdavResource getResource(String res) throws HttpException, IOException { return new WebdavResource(getURL(res)); } private void transfer(String file) { transfer(file, false); } private void transfer(String file, boolean up) { String out = StringUtils.getDir(file); if(StringUtils.isRelative(file)) { file = getPWD() + file; } file = file.replace('\\', '/'); out = out.replace('\\', '/'); String outfile = StringUtils.getFile(file); if(file.endsWith("/")) { if(up) { Log.debug("Directory upload not implemented yet."); return; } transferDir(file, getLocalPath() + out); return; } else { if(up) { work(getLocalPath() + outfile, file); } else { work(file, getLocalPath() + outfile); } } } private void work(String file, String outfile) { Log.out("transfer started\nfile: " + file + "\noutfile: " + outfile); try { if(outfile.startsWith("http://")) { //out = new BufferedOutputStream(new FileOutputStream(new WebdavResource(new HttpURL(file)).getMethodData()); //new WebdavFile(new URL(outfile), user, pass))); //in = new BufferedInputStream(new FileInputStream(file)); String resPath = outfile.substring(0, outfile.lastIndexOf("/") + 1); String name = outfile.substring(outfile.lastIndexOf("/") + 1); Log.debug("Uploading " + file + " to " + resPath + " as " + name); //HttpURL url = getURL(resPath); WebdavResource res = getResource(resPath); //new WebdavResource(url); /* if(res.checkinMethod()) Log.debug("Checkin OK"); else Log.debug("Checkin FAILED"); Enumeration e = res.getAllowedMethods(); while(e != null && e.hasMoreElements()) { Log.debug("Method: " + e.nextElement().toString()); } */ if(res.putMethod(new File(file))) { fireProgressUpdate(file, DataConnection.FINISHED, -1); } else { Log.debug("Upload failed."); fireProgressUpdate(file, DataConnection.FAILED, -1); } return; } Log.debug("Downloading " + file + " to " + outfile); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outfile)); BufferedInputStream in = new BufferedInputStream(getResource(file) .getMethodData()); //new WebdavResource(getURL(file)).getMethodData()); byte[] buf = new byte[webdavBuffer]; int len = 0; int reallen = 0; //System.out.println(file+":"+getLocalPath()+outfile); while(true) { len = in.read(buf); //System.out.print("."); if(len == StreamTokenizer.TT_EOF) { break; } out.write(buf, 0, len); reallen += len; fireProgressUpdate(StringUtils.getFile(file), DataConnection.GET, reallen); } out.flush(); out.close(); in.close(); fireProgressUpdate(file, DataConnection.FINISHED, -1); } catch(IOException ex) { Log.debug("Error with file IO (" + ex + ")!"); ex.printStackTrace(); fireProgressUpdate(file, DataConnection.FAILED, -1); } } public int upload(String file, InputStream in) { /* if(StringUtils.isRelative(file)) file = getPWD() + file; file = file.replace('\\','/'); try { work(new BufferedInputStream(in), file, file); return 0; } catch(Exception ex) { Log.debug("Error: " + ex.toString()); ex.printStackTrace(); return -1; } */ Log.debug("Upload using InputStream is not implemented yet!"); return -1; } /* private void work(BufferedInputStream in, String outfile, String file) { Log.out("transfer started, input from stream\noutfile: " + outfile); try { BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outfile)); byte buf[] = new byte[webdavBuffer]; int len = 0; int reallen = 0; while(true) { len = in.read(buf); System.out.print("."); if(len == StreamTokenizer.TT_EOF) break; out.write(buf,0,len); reallen += len; fireProgressUpdate(StringUtils.getFile(file),DataConnection.GET, reallen); } out.flush(); out.close(); in.close(); fireProgressUpdate(file,DataConnection.FINISHED, -1); } catch(IOException ex) { Log.debug("Error with file IO ("+ex+")!"); ex.printStackTrace(); fireProgressUpdate(file,DataConnection.FAILED, -1); } } */ public InputStream getDownloadInputStream(String file) { if(StringUtils.isRelative(file)) { file = getPWD() + file; } file = file.replace('\\', '/'); try { return getResource(file).getMethodData(); } catch(Exception ex) { ex.printStackTrace(); Log.debug(ex.toString() + " @WebdavConnection::getDownloadInputStream"); return null; } } public void addConnectionListener(ConnectionListener l) { listeners.add(l); } public void setConnectionListeners(Vector l) { listeners = l; } /** remote directory has changed */ public void fireDirectoryUpdate() { if(listeners == null) { return; } else { for(int i = 0; i < listeners.size(); i++) { ((ConnectionListener) listeners.elementAt(i)).updateRemoteDirectory(this); } } } public boolean login(String user, String pass) { return true; } public void fireProgressUpdate(String file, String type, int bytes) { if(listeners == null) { return; } else { for(int i = 0; i < listeners.size(); i++) { ConnectionListener listener = (ConnectionListener) listeners.elementAt(i); if(shortProgress && Settings.shortProgress) { if(type.startsWith(DataConnection.DFINISHED)) { listener.updateProgress(baseFile, DataConnection.DFINISHED + ":" + fileCount, bytes); } listener.updateProgress(baseFile, DataConnection.GETDIR + ":" + fileCount, bytes); } else { listener.updateProgress(file, type, bytes); } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -