当前位置: 首页 > 编程日记 > 正文

Java项目:资源下载工具(java+swing)

源码获取:博客首页 "资源" 里下载!

功能简介:

下载地址、保存位置、下载设置、下载进度

文件仓库控制器:

/*** @ClassName: FileStoreController* @Description: 文件仓库控制器**/
@Controller
public class FileStoreController extends BaseController {private Logger logger = LogUtils.getInstance(FileStoreController.class);/*** @Description 上传临时文件* @Author xw* @Date 23:14 2020/3/9* @Param [files]* @return void**/@PostMapping("/uploadTempFile")public String uploadTempFile(@RequestParam("file") MultipartFile file,String url) {session.setAttribute("imgPath","https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2654852821,3851565636&fm=26&gp=0.jpg");String name = file.getOriginalFilename().replaceAll(" ","");if (!checkTarget(name)){logger.error("临时文件上传失败!文件名不符合规范...");session.setAttribute("msg", "上传失败!文件名不符合规范");return "redirect:/temp-file";}SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");String dateStr = format.format(new Date());String path = "temp/"+dateStr +"/"+UUID.randomUUID();try {if (FtpUtil.uploadFile("/"+path, name, file.getInputStream())){//上传成功logger.info("临时文件上传成功!"+name);String size = String.valueOf(file.getSize());TempFile tempFile = TempFile.builder().fileName(name).filePath(path).size(size).uploadTime(new Date()).build();if (tempFileService.insert(tempFile)) {try {String id = UUID.randomUUID().toString();String p = request.getSession().getServletContext().getRealPath("/user_img/");Long t = tempFile.getUploadTime().getTime();url = url+"/file/share?t="+ UUID.randomUUID().toString().substring(0,10) +"&f="+tempFile.getFileId()+"&p="+size+"&flag=2";File targetFile = new File(p, "");if (!targetFile.exists()) {targetFile.mkdirs();}File f = new File(p, id + ".jpg");if (!f.exists()){//文件不存在,开始生成二维码并保存文件OutputStream os = new FileOutputStream(f);QRCodeUtil.encode(url, "/static/img/logo.png", os, true);os.close();}//异步删除临时文件tempFileService.deleteById(tempFile.getFileId());session.setAttribute("imgPath","user_img/"+id+".jpg");session.setAttribute("url",url);session.setAttribute("msg","上传成功,扫码/访问链接 即可下载!");return "redirect:/temp-file";} catch (Exception e) {e.printStackTrace();}}else {logger.info("临时文件数据库写入失败!"+name);session.setAttribute("url","error");session.setAttribute("msg", "服务器出错了,临时文件上传失败!");}}else{//上传失败logger.info("临时文件上传失败!"+name);session.setAttribute("url","error");session.setAttribute("msg", "服务器出错了,上传失败!");}} catch (IOException e) {e.printStackTrace();}return "redirect:/temp-file";}/*** @Description 网盘的文件上传* @Author xw* @Date 23:10 2020/2/10* @Param [files]* @return java.util.Map<java.lang.String,java.lang.Object>**/@PostMapping("/uploadFile")@ResponseBodypublic Map<String, Object> uploadFile(@RequestParam("file") MultipartFile files) {Map<String, Object> map = new HashMap<>();if (fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission() != 0){logger.error("用户没有上传文件的权限!上传失败...");map.put("code", 499);return map;}FileStore store = fileStoreService.getFileStoreByUserId(loginUser.getUserId());Integer folderId = Integer.valueOf(request.getHeader("id"));String name = files.getOriginalFilename().replaceAll(" ","");//获取当前目录下的所有文件,用来判断是否已经存在List<MyFile> myFiles = null;if (folderId == 0){//当前目录为根目录myFiles = myFileService.getRootFilesByFileStoreId(loginUser.getFileStoreId());}else {//当前目录为其他目录myFiles = myFileService.getFilesByParentFolderId(folderId);}for (int i = 0; i < myFiles.size(); i++) {if ((myFiles.get(i).getMyFileName()+myFiles.get(i).getPostfix()).equals(name)){logger.error("当前文件已存在!上传失败...");map.put("code", 501);return map;}}SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");String dateStr = format.format(new Date());String path = loginUser.getUserId()+"/"+dateStr +"/"+folderId;if (!checkTarget(name)){logger.error("上传失败!文件名不符合规范...");map.put("code", 502);return map;}Integer sizeInt = Math.toIntExact(files.getSize() / 1024);//是否仓库放不下该文件if(store.getCurrentSize()+sizeInt > store.getMaxSize()){logger.error("上传失败!仓库已满。");map.put("code", 503);return map;}//处理文件大小String size = String.valueOf(files.getSize()/1024.0);int indexDot = size.lastIndexOf(".");size = size.substring(0,indexDot);int index = name.lastIndexOf(".");String tempName = name;String postfix = "";int type = 4;if (index!=-1){tempName = name.substring(index);name = name.substring(0,index);//获得文件类型type = getType(tempName.toLowerCase());postfix = tempName.toLowerCase();}try {//提交到FTP服务器boolean b = FtpUtil.uploadFile("/"+path, name + postfix, files.getInputStream());if (b){//上传成功logger.info("文件上传成功!"+files.getOriginalFilename());//向数据库文件表写入数据myFileService.addFileByFileStoreId(MyFile.builder().myFileName(name).fileStoreId(loginUser.getFileStoreId()).myFilePath(path).downloadTime(0).uploadTime(new Date()).parentFolderId(folderId).size(Integer.valueOf(size)).type(type).postfix(postfix).build());//更新仓库表的当前大小fileStoreService.addSize(store.getFileStoreId(),Integer.valueOf(size));try {Thread.sleep(5000);map.put("code", 200);} catch (InterruptedException e) {e.printStackTrace();}}else{logger.error("文件上传失败!"+files.getOriginalFilename());map.put("code", 504);}} catch (IOException e) {e.printStackTrace();}return map;}/*** @Description 网盘的文件下载 * @Author xw* @Date 23:13 2020/2/10* @Param [fId]* @return void**/@GetMapping("/downloadFile")public String downloadFile(@RequestParam Integer fId){if (fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission() == 2){logger.error("用户没有下载文件的权限!下载失败...");return "redirect:/error401Page";}//获取文件信息MyFile myFile = myFileService.getFileByFileId(fId);String remotePath = myFile.getMyFilePath();String fileName = myFile.getMyFileName()+myFile.getPostfix();try {//去FTP上拉取OutputStream os = new BufferedOutputStream(response.getOutputStream());response.setCharacterEncoding("utf-8");// 设置返回类型response.setContentType("multipart/form-data");// 文件名转码一下,不然会出现中文乱码response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));boolean flag = FtpUtil.downloadFile("/" + remotePath, fileName, os);if (flag) {myFileService.updateFile(MyFile.builder().myFileId(myFile.getMyFileId()).downloadTime(myFile.getDownloadTime() + 1).build());os.flush();os.close();logger.info("文件下载成功!" + myFile);}} catch (Exception e) {e.printStackTrace();}return "success";}/*** @Description 删除文件* @Author xw* @Date 23:14 2020/2/10* @Param [fId, folder]* @return java.lang.String**/@GetMapping("/deleteFile")public String deleteFile(@RequestParam Integer fId,Integer folder){//获得文件信息MyFile myFile = myFileService.getFileByFileId(fId);String remotePath = myFile.getMyFilePath();String fileName = myFile.getMyFileName()+myFile.getPostfix();//从FTP文件服务器上删除文件boolean b = FtpUtil.deleteFile("/"+remotePath, fileName);if (b){//删除成功,返回空间fileStoreService.subSize(myFile.getFileStoreId(),Integer.valueOf(myFile.getSize()));//删除文件表对应的数据myFileService.deleteByFileId(fId);}logger.info("删除文件成功!"+myFile);return "redirect:/files?fId="+folder;}/*** @Description 删除文件夹并清空文件* @Author xw* @Date 15:22 2020/2/12* @Param [fId]* @return java.lang.String**/@GetMapping("/deleteFolder")public String deleteFolder(@RequestParam Integer fId){FileFolder folder = fileFolderService.getFileFolderByFileFolderId(fId);//强制删除deleteFolderF(folder);return folder.getParentFolderId() == 0?"redirect:/files":"redirect:/files?fId="+folder.getParentFolderId();} /*** @Description 迭代删除文件夹里面的所有文件和子文件夹* @Author xw* @Date 9:17 2020/2/29* @Param [folder]* @return void**/public void deleteFolderF(FileFolder folder){//获得当前文件夹下的所有子文件夹List<FileFolder> folders = fileFolderService.getFileFolderByParentFolderId(folder.getFileFolderId());//删除当前文件夹的所有的文件List<MyFile> files = myFileService.getFilesByParentFolderId(folder.getFileFolderId());if (files.size()!=0){for (int i = 0; i < files.size(); i++) {Integer fileId = files.get(i).getMyFileId();boolean b = FtpUtil.deleteFile("/"+files.get(i).getMyFilePath(), files.get(i).getMyFileName() + files.get(i).getPostfix());if (b){myFileService.deleteByFileId(fileId);fileStoreService.subSize(folder.getFileStoreId(),Integer.valueOf(files.get(i).getSize()));}}}if (folders.size()!=0){for (int i = 0; i < folders.size(); i++) {deleteFolderF(folders.get(i));}}fileFolderService.deleteFileFolderById(folder.getFileFolderId());}/*** @Description 添加文件夹* @Author xw* @Date 23:16 2020/2/10* @Param [folder, map]* @return java.lang.String**/@PostMapping("/addFolder")public String addFolder(FileFolder folder,Map<String, Object> map) {//设置文件夹信息folder.setFileStoreId(loginUser.getFileStoreId());folder.setTime(new Date());//获得当前目录下的所有文件夹,检查当前文件夹是否已经存在List<FileFolder> fileFolders = null;if (folder.getParentFolderId() == 0){//向用户根目录添加文件夹fileFolders = fileFolderService.getRootFoldersByFileStoreId(loginUser.getFileStoreId());}else{//向用户的其他目录添加文件夹fileFolders = fileFolderService.getFileFolderByParentFolderId(folder.getParentFolderId());}for (int i = 0; i < fileFolders.size(); i++) {FileFolder fileFolder = fileFolders.get(i);if (fileFolder.getFileFolderName().equals(folder.getFileFolderName())){logger.info("添加文件夹失败!文件夹已存在...");return "redirect:/files?error=1&fId="+folder.getParentFolderId();}}//向数据库写入数据Integer integer = fileFolderService.addFileFolder(folder);logger.info("添加文件夹成功!"+folder);return "redirect:/files?fId="+folder.getParentFolderId();}/*** @Description 重命名文件夹* @Author xw* @Date 23:18 2020/2/10* @Param [folder, map]* @return java.lang.String**/@PostMapping("/updateFolder")public String updateFolder(FileFolder folder,Map<String, Object> map) {//获得文件夹的数据库信息FileFolder fileFolder = fileFolderService.getFileFolderByFileFolderId(folder.getFileFolderId());fileFolder.setFileFolderName(folder.getFileFolderName());//获得当前目录下的所有文件夹,用于检查文件夹是否已经存在List<FileFolder> fileFolders = fileFolderService.getFileFolderByParentFolderId(fileFolder.getParentFolderId());for (int i = 0; i < fileFolders.size(); i++) {FileFolder folder1 = fileFolders.get(i);if (folder1.getFileFolderName().equals(folder.getFileFolderName()) && folder1.getFileFolderId() != folder.getFileFolderId()){logger.info("重命名文件夹失败!文件夹已存在...");return "redirect:/files?error=2&fId="+fileFolder.getParentFolderId();}}//向数据库写入数据Integer integer = fileFolderService.updateFileFolderById(fileFolder);logger.info("重命名文件夹成功!"+folder);return "redirect:/files?fId="+fileFolder.getParentFolderId();}/*** @Description 重命名文件* @Author xw* @Date 12:47 2020/2/12* @Param [file, map]* @return java.lang.String**/@PostMapping("/updateFileName")public String updateFileName(MyFile file,Map<String, Object> map) {MyFile myFile = myFileService.getFileByFileId(file.getMyFileId());if (myFile != null){String oldName = myFile.getMyFileName();String newName = file.getMyFileName();if (!oldName.equals(newName)){boolean b = FtpUtil.reNameFile(myFile.getMyFilePath() + "/" + oldName+myFile.getPostfix(), myFile.getMyFilePath() + "/" + newName+myFile.getPostfix());if (b){Integer integer = myFileService.updateFile(MyFile.builder().myFileId(myFile.getMyFileId()).myFileName(newName).build());if (integer == 1){logger.info("修改文件名成功!原文件名:"+oldName+"  新文件名:"+newName);}else{logger.error("修改文件名失败!原文件名:"+oldName+"  新文件名:"+newName);}}}}return "redirect:/files?fId="+myFile.getParentFolderId();}/*** @Description 获得二维码 * @Author xw* @Date 15:20 2020/2/12* @Param [id, url]* @return java.util.Map<java.lang.String,java.lang.Object>**/@GetMapping("getQrCode")@ResponseBodypublic Map<String,Object> getQrCode(@RequestParam Integer id,@RequestParam String url){Map<String,Object> map = new HashMap<>();map.put("imgPath","https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2654852821,3851565636&fm=26&gp=0.jpg");if (id != null){MyFile file = myFileService.getFileByFileId(id);if (file != null){try {String path = request.getSession().getServletContext().getRealPath("/user_img/");url = url+"/file/share?t="+ UUID.randomUUID().toString().substring(0,10) +"&f="+file.getMyFileId()+"&p="+file.getUploadTime().getTime()+""+file.getSize()+"&flag=1";File targetFile = new File(path, "");if (!targetFile.exists()) {targetFile.mkdirs();}File f = new File(path, id + ".jpg");if (!f.exists()){//文件不存在,开始生成二维码并保存文件OutputStream os = new FileOutputStream(f);QRCodeUtil.encode(url, "/static/img/logo.png", os, true);os.close();}map.put("imgPath","user_img/"+id+".jpg");map.put("url",url);} catch (Exception e) {e.printStackTrace();}}}return map;}/*** @Description 分享文件* @Author xw* @Date 14:23 2020/2/12* @Param [fId]* @return void**/@GetMapping("/file/share")public String shareFile(Integer f,String p,String t,Integer flag){String fileNameTemp = "";String remotePath = "";String fileName = "";Integer times = 0;if (flag == null || f == null || p == null || t == null){logger.info("下载分享文件失败,参数错误");return "redirect:/error400Page";}if(flag == 1){//获取文件信息MyFile myFile = myFileService.getFileByFileId(f);if (myFile == null){return "redirect:/error404Page";}String pwd = myFile.getUploadTime().getTime()+""+myFile.getSize();if (!pwd.equals(p)){return "redirect:/error400Page";}remotePath = myFile.getMyFilePath();fileName = myFile.getMyFileName()+myFile.getPostfix();}else if(flag == 2){TempFile tempFile = tempFileService.queryById(f);if (tempFile == null){return "redirect:/error404Page";}Long test = tempFile.getUploadTime().getTime();String pwd = tempFile.getSize();if (!pwd.equals(p)){return "redirect:/error400Page";}remotePath = tempFile.getFilePath();fileName = tempFile.getFileName();}else {return "redirect:/error400Page";}fileNameTemp = fileName;try {//解决下载文件时 中文文件名乱码问题boolean isMSIE = isMSBrowser(request);if (isMSIE) {//IE浏览器的乱码问题解决fileNameTemp = URLEncoder.encode(fileNameTemp, "UTF-8");} else {//万能乱码问题解决fileNameTemp = new String(fileNameTemp.getBytes("UTF-8"), "ISO-8859-1");}//去FTP上拉取OutputStream os = new BufferedOutputStream(response.getOutputStream());response.setCharacterEncoding("utf-8");// 设置返回类型response.setContentType("multipart/form-data");// 文件名转码一下,不然会出现中文乱码response.setHeader("Content-Disposition", "attachment;fileName=" + fileNameTemp);if (FtpUtil.downloadFile("/" + remotePath, fileName, os)) {myFileService.updateFile(MyFile.builder().myFileId(f).downloadTime(times + 1).build());os.flush();os.close();logger.info("文件下载成功!");}} catch (Exception e) {e.printStackTrace();}return "success";}/*** @Description 根据文件的后缀名获得对应的类型* @Author xw* @Date 23:20 2020/2/10* @Param [type]* @return int 1:文本类型   2:图像类型  3:视频类型  4:音乐类型  5:其他类型**/public int getType(String type){if (".chm".equals(type)||".txt".equals(type)||".xmind".equals(type)||".xlsx".equals(type)||".md".equals(type)||".doc".equals(type)||".docx".equals(type)||".pptx".equals(type)||".wps".equals(type)||".word".equals(type)||".html".equals(type)||".pdf".equals(type)){return  1;}else if (".bmp".equals(type)||".gif".equals(type)||".jpg".equals(type)||".ico".equals(type)||".vsd".equals(type)||".pic".equals(type)||".png".equals(type)||".jepg".equals(type)||".jpeg".equals(type)||".webp".equals(type)||".svg".equals(type)){return 2;} else if (".avi".equals(type)||".mov".equals(type)||".qt".equals(type)||".asf".equals(type)||".rm".equals(type)||".navi".equals(type)||".wav".equals(type)||".mp4".equals(type)||".mkv".equals(type)||".webm".equals(type)){return 3;} else if (".mp3".equals(type)||".wma".equals(type)){return 4;} else {return 5;}}/*** @Description 正则验证文件名是否合法 [汉字,字符,数字,下划线,英文句号,横线]* @Author xw* @Date 23:22 2020/2/10* @Param [target]* @return boolean**/public boolean checkTarget(String target) {final String format = "[^\\u4E00-\\u9FA5\\uF900-\\uFA2D\\w-_.]";Pattern pattern = Pattern.compile(format);Matcher matcher = pattern.matcher(target);return !matcher.find();}/*** @Description 判断当前浏览器是否为ie* @Author xw* @Date 22:39 2020/3/5* @Param [request]* @return boolean**/public static boolean isMSBrowser(HttpServletRequest request) {String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"};String userAgent = request.getHeader("User-Agent");for (String signal : IEBrowserSignals) {if (userAgent.contains(signal)){return true;}}return false;}}

FTP工具类:

/*** @ClassName: FtpUtil* @Description: FTP工具类**/
public class FtpUtil {/*** FTP服务器hostname*/private static String HOST = "192.168.1.106";/*** FTP服务器端口*/private static int PORT = 21;/*** FTP登录账号*/private static String USERNAME = "chen";/*** FTP登录密码*/private static String PASSWORD = "chenfuning";/*** FTP服务器基础目录*/private static String BASEPATH = "";/*** FTP客户端*/private static FTPClient ftp;/*** @Description 初始化FTP客户端* @Author xw* @Date 12:34 2020/2/5* @Param []* @return boolean**/public static boolean initFtpClient(){ftp = new FTPClient();int reply;try {// 连接FTP服务器ftp.connect(HOST, PORT);//登录, 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器ftp.login(USERNAME, PASSWORD);ftp.setBufferSize(10240);//设置传输超时时间为60秒ftp.setDataTimeout(600000);//连接超时为60秒ftp.setConnectTimeout(600000);//FTP以二进制形式传输ftp.setFileType(FTP.BINARY_FILE_TYPE);reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return false;}} catch (IOException e) {e.printStackTrace();}return true;}/*** Description: 向FTP服务器上传文件* @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath* @param filename 上传到FTP服务器上的文件名* @param input 本地要上传的文件的 输入流* @return 成功返回true,否则返回false*/public static boolean uploadFile(String filePath, String filename, InputStream input) {boolean result = false;try {filePath = new String(filePath.getBytes("GBK"),"iso-8859-1");filename = new String(filename.getBytes("GBK"),"iso-8859-1");if (!initFtpClient()){return result;};//切换到上传目录ftp.enterLocalPassiveMode();if (!ftp.changeWorkingDirectory(BASEPATH+filePath)) {//如果目录不存在创建目录String[] dirs = filePath.split("/");String tempPath = BASEPATH;for (String dir : dirs) {if (null == dir || "".equals(dir)){continue;}tempPath += "/" + dir;if (!ftp.changeWorkingDirectory(tempPath)) {if (!ftp.makeDirectory(tempPath)) {return result;} else {ftp.changeWorkingDirectory(tempPath);}}}}//设置上传文件的类型为二进制类型ftp.setFileType(FTP.BINARY_FILE_TYPE);//上传文件ftp.enterLocalPassiveMode();if (!ftp.storeFile(filename, input)) {return result;}input.close();ftp.logout();result = true;}catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return result;}/*** Description: 从FTP服务器下载文件* @param remotePath FTP服务器上的相对路径* @param fileName 要下载的文件名* @return*/public static boolean downloadFile( String remotePath,String fileName,String localPath) {boolean result = false;try {remotePath = new String(remotePath.getBytes("GBK"),"iso-8859-1");fileName = new String(fileName.getBytes("GBK"),"iso-8859-1");if (!initFtpClient()){return result;};// 转移到FTP服务器目录ftp.changeWorkingDirectory(remotePath);ftp.enterLocalPassiveMode();FTPFile[] fs = ftp.listFiles();for (FTPFile ff : fs) {if (ff.getName().equals(fileName)) {ftp.enterLocalPassiveMode();FileOutputStream outputStream = new FileOutputStream(new File(localPath));ftp.retrieveFile(remotePath+"/"+fileName,outputStream);result = true;outputStream.close();}}ftp.logout();} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return result;}/*** @Description 从ftp服务器下载文件到指定输出流* @Author xw* @Date 22:30 2020/3/5* @Param [remotePath, fileName, outputStream]* @return boolean**/public static boolean downloadFile(String remotePath, String fileName, OutputStream outputStream) {boolean result = false;try {remotePath = new String(remotePath.getBytes("GBK"),"iso-8859-1");fileName = new String(fileName.getBytes("GBK"),"iso-8859-1");if (!initFtpClient()){return result;};// 转移到FTP服务器目录ftp.changeWorkingDirectory(remotePath);ftp.enterLocalPassiveMode();FTPFile[] fs = ftp.listFiles();for (FTPFile ff : fs) {if (ff.getName().equals(fileName)) {ftp.enterLocalPassiveMode();ftp.retrieveFile(remotePath+"/"+fileName,outputStream);result = true;}}ftp.logout();} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return result;}/*** @Description 删除文件* @Author xw* @Date 11:38 2020/2/6* @Param [remotePath, fileName]* @return void**/public static boolean deleteFile( String remotePath,String fileName){boolean flag = false;try {remotePath = new String(remotePath.getBytes("GBK"),"iso-8859-1");fileName = new String(fileName.getBytes("GBK"),"iso-8859-1");if (!initFtpClient()){return flag;};// 转移到FTP服务器目录ftp.changeWorkingDirectory(remotePath);ftp.enterLocalPassiveMode();FTPFile[] fs = ftp.listFiles();for (FTPFile ff : fs) {if ("".equals(fileName)){return flag;}if (ff.getName().equals(fileName)){String filePath = remotePath + "/" +fileName;ftp.deleteFile(filePath);flag = true;}}ftp.logout();} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return flag;}/*** @Description 删除文件夹* @Author xw* @Date 11:38 2020/2/6* @Param [remotePath, fileName]* @return void**/public static boolean deleteFolder( String remotePath){boolean flag = false;try {remotePath = new String(remotePath.getBytes("GBK"),"iso-8859-1");if (!initFtpClient()){return flag;};// 转移到FTP服务器目录ftp.changeWorkingDirectory(remotePath);ftp.enterLocalPassiveMode();FTPFile[] fs = ftp.listFiles();if (fs.length==0){ftp.removeDirectory(remotePath);flag = true;}ftp.logout();} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return flag;}/*** @Description 修改文件名称或者文件夹名* @Author xw* @Date 21:18 2020/2/11* @Param [oldAllName, newAllName]* @return boolean**/public static boolean reNameFile( String oldAllName,String newAllName){boolean flag = false;try {oldAllName = new String(oldAllName.getBytes("GBK"),"iso-8859-1");newAllName = new String(newAllName.getBytes("GBK"),"iso-8859-1");if (!initFtpClient()){return flag;};ftp.enterLocalPassiveMode();ftp.rename(oldAllName,newAllName);flag = true;ftp.logout();} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return flag;}
}

 源码获取:博客首页 "资源" 里下载!

相关文章:

江南Style之---西湖

西湖古称“钱塘湖”&#xff0c;又名“西子湖”&#xff0c;古代诗人苏轼就对它评价道&#xff1a;“欲把西湖比西子&#xff0c;淡妆浓抹总相宜。西湖&#xff0c;是一首诗&#xff0c;一幅天然图画&#xff0c;一个美丽动人的故事&#xff0c;不论是多年居住在这里的人还是匆…

mimikatz

下载后&#xff0c;在目标机直接运行 常用命令&#xff1a; 提升权限&#xff1a;privilege::debug 获取用户登录明文账号密码&#xff1a;sekurlsa::logonPasswords 获取用户密码hash值&#xff1a;lsadump::sam 转载于:https://www.cnblogs.com/xiaoqiyue/p/10824169.html

通过 RDTSC 指令从 CPU 寄存器中直接获取系统时钟

很多时候我们使用函数 gettimeofday 以及 clock_gettime 作为我们获取 wall lock的时钟函数。 因为这两种函数是 glibc 提供的用户封装&#xff0c;简单易用&#xff0c;而且能够精确到 ns&#xff0c;对于大多数的时钟需求场景都已经够用了。 但是如果 我们的应用 调用时钟频…

Java项目:星际争霸游戏(java+swing+awt界面编程+IO输入输出流+socket+udp网络通信)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能简介&#xff1a; 星际争霸游戏项目&#xff0c;该项目实现了单人模式和多人合作模式&#xff0c;可记录游戏进度&#xff0c;新建游戏&#xff0c;载入历史记录等功能&#xff0c;多人模式下可以创建一…

GTONE清理维护建议方案

1、日志清理/home/gtone/AppGov/analyzer/log//home/gtone/AppGov/analyzer/SRC/temp//home/gtone/AppGov/WAS/logs/ 2、扩容现有磁盘空间至200GB转载于:https://www.cnblogs.com/arcer/p/4461018.html

[C#]委托和事件(讲解的非常不错)

引言 委托 和 事件在 .Net Framework中的应用非常广泛&#xff0c;然而&#xff0c;较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿&#xff0c;过了这个槛的人&#xff0c;觉得真是太容易了&#xff0c;而没有过去的人每次见到委托和事件就觉…

BZOJ1460: Pku2114 Boatherds

题目链接&#xff1a;点这里 题目描述&#xff1a;给你一棵n个点的带权有根树&#xff0c;有p个询问&#xff0c;每次询问树中是否存在一条长度为Len的路径&#xff0c;如果是&#xff0c;输出Yes否输出No. 数据范围&#xff1a;\(n\le1e5\,,p\le100\,,长度\le1e5\) Solution: …

centos 自定义内核模块 编译运行

简单记录一下 centos 自定义内核模块的一些编译运行记录&#xff0c;代码如下&#xff1a; 主要功能是通过rdtsc 指令直接从 CPU MSR 寄存器中获取时钟&#xff0c;尝试获取两次&#xff0c;两次之间会做一些赋值操作什么的&#xff0c;并记录一下时差。 #include <linux/…

os.system() 和 os.popen()

1.os.popen(command[, mode[, bufsize]]) os.system(command)2.os.popen() 功能强于os.system() , os.popen() 可以返回回显的内容&#xff0c;以文件描述符返回。eg:t_f os.popen ("ping 192.168.1.1")print t_f.read()或者:for line in os.popen("dir"…

Java项目:医院管理系统(java+Springboot+Maven+Mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述本系统功能包括&#xff1a;医院挂号&#xff0c;退号&#xff0c;缴费&#xff0c;退费&#xff0c;检查申请单开立&#xff0c;科室管理&#xff0c;医生开单&#xff0c;挂号级别&#xff0c…

任意阶幻方..

1 /*coder Gxjun*/2 #include<stdio.h>3 #include<string.h>4 #include<stdlib.h>5 #define maxn 1006 int map[maxn][maxn] ;7 void creat_magic(int n,int x,int y ,int sn) //奇阶幻方构造8 {9 int i,j,k;10 i0;11 jn/2;12 for(kn;k<…

UML与软件建模 第三次作业

1.单元测试的任务有哪些&#xff1f; 单元测试是对软件基本组成单元进行的测试,而且软件单元是与程序的其他部分相隔离的情况下进行独立的测试. 任务主要包括对单元功能、逻辑控制、数据和安全性等各方面进行必要的测试。具体地说&#xff0c;包括单元中所有独立执行路径、数据…

Pliops XDP(Extreme Data Processor)数据库存储设计的新型加速硬件

文章目录0 前言1 核心问题1.1 引擎的各方面性能受限于数据结构的选择1.2 压缩功能 导致的CPU瓶颈1.3 Crash-safe 崩溃异常的无奈选择1.4 当前主流 加速硬件 较难满足存储性能提升的要求2 XDP 设计原则2.1 数据结构上的优化2.2 解决 压缩引入的CPU消耗2.3 异常恢复的设计2.4 易于…

Java项目:潜艇大战项目(java+swing)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能简介&#xff1a; Java swing实现的一款小游戏潜艇大战的项目源码 游戏界面&#xff1a; SuppressWarnings({ "unused", "serial" }) public class GameGUI extends JPanel {//卡…

可以发张图片做链接用吗

转载于:https://www.cnblogs.com/wasss/p/4466492.html

更改显示器的分辨率

1.桌面右击&#xff0c;如图1-1所示。2.点击屏幕分辩率&#xff0c;选择分辨率调大小&#xff0c;确定&#xff0c;如图1-2所示。转载于:https://blog.51cto.com/qikai/1367734

Java 处理0x00特殊字符

Java 处理0x00特殊字符 一、0x00字符 1&#xff0c;0x00是ascii码的0值&#xff1a;NUL 2&#xff0c;0x00在windows系统中显示&#xff1a; 3&#xff0c;0x00在Linux中显示&#xff1a; ctrlV ctrl可以打出此字符 二、Java解决0x00字符 str.replaceAll("\\u0000",&…

关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

二月的最后一篇水文…想写一些有意思的东西。 文章目录环检测在图数据结构中的应用深度/广度优先 检测环并查集数据结构 (Union-Find)基本概念初始化合并 union查找祖先优化1: 合并过程 利用 rank 优化路径优化2: 路径压缩(Path Compression)并查集 解决图中检测环问题环检测在…

Java项目:智能制造生产管理平台(java+SSM+mysql+Maven+Easyui+JSP)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 运行环境&#xff1a;jdk1.8、tomcat7.0/8.5、Mysql5.7/5.1、Maven3.6/3.5、 eclipse/STS 功能简介&#xff1a;计划进度、设备管理、工艺监控、物料监控、质量监控、人员监控等 访问注册控制层&#xff1a;…

JAVA-Eclipse快捷键

Ctrl1&#xff1a;快速修复。CtrlD:快速删除行。ShiftEnter&#xff1a;快速调到下一行。CtrlF11:快速运行。Alt上下方向键&#xff1a;快速移动。CtrlM:光标所在视图最大化。Alt/:智能补全。Ctrl/&#xff1a;快速注释代码。 转载于:https://www.cnblogs.com/bluewhy/p/44669…

Android RelativeLayout属性

// 相对于给定ID控件android:layout_above 将该控件的底部置于给定ID的控件之上;android:layout_below 将该控件的底部置于给定ID的控件之下;android:layout_toLeftOf 将该控件的右边缘与给定ID的控件左边缘对齐;android:layout_toRightOf 将该控件的左边缘与给定ID的控件右边缘…

详解Azure的权限控制

注意&#xff1a;本文档仅限于Azure国际版&#xff0c;国内版略有不同Azure中的角色分配相对来说是比较复杂的的&#xff0c;对于任何云组织来说&#xff0c;云的资源访问管理权限都是一项非常重要的功能&#xff0c;azure中的授权系统叫做基于角色的访问控制&#xff08;RBAC&…

SNMP introduction

简单网络管理协议(SNMP)首先是由Internet工程任务组织(Internet Engineering Task Force)(IETF)的研究小组为了解决Internet上的路由器管理问题而提出的。许多人认为 SNMP在IP上运行的原因是Internet运行的是TCP/IP协议&#xff0c;然而事实并不是这样。 SNMP被设计成与协议无…

Java项目:在线考试系统(java+SSM+mysql+JSP)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 运行环境&#xff1a;jdk1.8、Mysql5.7、Tomcat8.5、IDEA/Eclipse 功能简介&#xff1a;在线考试、历史回顾、个人成绩查询等。 管理员和教师功能有&#xff1a;学院管理、班级管理、课程管理、教师、学生…

Keil中使用宏编译来定义DEBUG输出

使用宏编译来格式化调试信息&#xff0c;是一个不错的方法&#xff0c;即可以在需要的时候打印出信息&#xff0c;还可以格式化我们所需要的输出。 #define DEBUG 1 #if (DEBUG 1) #define DBG(Args...) printf(##Args) #define DBGFL(s, Args...) printf("[%s:%d]&qu…

解决用户使用临时配置文件登陆WIN7的问题

用户登录Win7后&#xff0c;经常会遇到 “您已使用临时配置文件登陆” 的提示,忽略此提示的用户通常在桌面上保留的文件再次重启进入后发现文件丢失了&#xff0c;或者原有桌面上的文件不见了&#xff0c;这样一定程度上降低了工作的效率.这里主要说一下如何解决此问题。用户登…

chosen.jquery.js 有搜索功能、多选功能的下拉框插件

chosen.jquery.js 有搜索功能、多选功能的下拉框插件 官方源码&#xff1a; https://github.com/harvesthq/chosen 该源码中的样例index.html有该插件的详细使用介绍posted on 2019-05-09 14:40 三天打鱼&#xff0c;两天晒网 阅读(...) 评论(...) 编辑 收藏 转载于:https://w…

MIB in SNMP

管理信息库MIB指明了网络元素所维持的变量&#xff08;即能够被管理进程查询和设置的信息&#xff09;。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构&#xff0c;它的根在最上面&#xff0c;根没有名字。图3画…

Java项目:后台管理系统脚手架项目(java+SpringBoot+FreeMarker+mysql+JSP)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目描述&#xff1a; 这是一个基于SpringBoot框架开发的后台管理系统脚手架项目。之所以称为脚手架项目&#xff0c;是因为这个项目复用性很强&#xff0c;如果以后有其他新的项目要设计后台管理系统的话&…

Extjs4.0.7 MVC Architecture异常

uncaught exception: Ext.Loader is not enabled, so dependencies cannot be resolved dynamically. Missing required class: AM.controller.User 解决方法&#xff1a; 在app.js最上面加上&#xff1a;Ext.Loader.setConfig({ enabled: true }); Ext.Loader.setConfig({ …