- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章使用jdk7的nio2操作文件拷贝和剪切示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
。
import java.io.File; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.FileVisitor; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List,
import com.xyq.io.enums.FileTypeMode; import com.xyq.io.enums.OptionFile_TYPE; import com.xyq.io.inf.NewNIoInf; import com.xyq.io.util.FindFileUtil; import com.xyq.io.util.MD5Util,
public class NewNIO implements NewNIoInf { 。
/*** * 拷贝或者移动文件 */ @Override public boolean copeOrMoveFile(String src, String tar, OptionFile_TYPE type) { 。
return realCopeOrMoveFile(Paths.get(src), tar, type); } 。
private boolean realCopeOrMoveFile(Path srcPath, String tar, OptionFile_TYPE type) { 。
Path tarPath = null; boolean copeSuccess = true; // 必须原始文件存在 if (srcPath.toFile().exists()) { /*** * 如果原始路径是带斜杠的那么就认为这是一个文件夹 */ if (isDir(tar)) tarPath = Paths.get(tar + File.separator + srcPath.toFile().getName()); else tarPath = Paths.get(tar); /*** * 然后进行N次(可以作为参数)拷贝操作(出错重连),是否覆盖拷贝,拷贝属性,拷贝操作不能使用回滚选项 */ for (int i = 0; i < 3; i++) { /*** * 如果是目标文件已经存在 */ if (tarPath.toFile().exists()) { /*** * 如果验证两个文件夹是相同的,拷贝选项下就不用拷贝,移动选项下就是删除原始文件 */ // 拷贝 if (OptionFile_TYPE.COPE.equals(type)) { if (equalsFile(srcPath.toFile(), tarPath.toFile())) return true; else copeSuccess = copeFile(srcPath, tarPath, true); } /*** * 移动操作,这里得非常小心,正常情况下,如果两个文件是一样的话, * 那么直接删除原始文件就可以了。但是,如果两个文件的一样,并且地址也 * 是一样的话,那么就不能删除原始的了,因为就是同一个文件,不能删除的。 */ else if (OptionFile_TYPE.MOVE.equals(type)) { if (equalsFile(srcPath.toFile(), tarPath.toFile())) { if (!srcPath.toFile().getAbsoluteFile() .equals(tarPath.toFile().getAbsoluteFile())) try { Files.delete(srcPath); /*** * 之所以要手动指向true,是因为可能存在前面删除失败的情况 */ if (!copeSuccess) copeSuccess = true; } catch (IOException e) { copeSuccess = false; } // 前面因为有异常的可能就不直接return,这里就可以了 else return true; } else copeSuccess = moveFile(srcPath, tarPath); } } /*** * 当目标文件不存在的时候,先判断父类文件夹是可创 建(父类文件夹存在或者可以创建),可创建时就创建 */ else { File par = tarPath.getParent().toFile(); /*** * 如果父类文件夹不存在并且无法创建,那么就不用拷贝了 */ if (!par.exists() && !par.mkdirs()) copeSuccess = false; else if (OptionFile_TYPE.COPE.equals(type)) copeSuccess = copeFile(srcPath, tarPath, false); else if (OptionFile_TYPE.MOVE.equals(type)) copeSuccess = moveFile(srcPath, tarPath); } // 如果操作成功,跳出循环 if (copeSuccess) break; } } else copeSuccess = false; return copeSuccess; } 。
/**** * 拷贝文件 */ 。
private boolean copeFile(Path srcPath, Path tarPath, boolean isExist) { 。
if (isExist) try { Files.copy(srcPath, tarPath, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES); } catch (IOException e) { return false; } else try { Files.copy(srcPath, tarPath, StandardCopyOption.COPY_ATTRIBUTES); } catch (IOException e) { return false; } return true; } 。
/*** * 移动文件,不能使用属性选项 * * @param srcPath * @param tarPath * @return */ private boolean moveFile(Path srcPath, Path tarPath) { 。
try { Files.move(srcPath, tarPath, StandardCopyOption.ATOMIC_MOVE); } catch (IOException e) { return false; } return true; } 。
/*** * 判断path路径是否是一个文件夹 * * @param path * @return */ private boolean isDir(String path) { 。
char lastC = path.charAt(path.length() - 1); if (lastC == '\\' || lastC == '/') return true; return false; } 。
/*** * 这是来验证两个文件是否相同,只是简单验证,可以强制必须使用md5进行验证 */ 。
public boolean equalsFile(File src, File tar) { 。
// 如果两个文件的长度不一样,那么肯定两个文件是不一样的 if (src.length() != tar.length()) return false; if (!src.getName().equals(tar.getName()) || src.lastModified() != tar.lastModified()) return MD5Util.EncoderFileByMd5(src).equals( MD5Util.EncoderFileByMd5(tar)); return true; } 。
/*** * 拷贝或者移动文件夹 */ @Override public void copeOrMoveDirectory(String src, final String tar, int tierSize, final OptionFile_TYPE type) { 。
if (!new File(src).exists()) throw new RuntimeException("找不到原始文件夹" + src); final int rootPos = getRootPosition(new File(src), tierSize); if (rootPos != -1) { try { Files.walkFileTree(Paths.get(src), new FileVisitor<Path>() { 。
String tarDirString = null,
/*** * 到达文件夹前,先把目标路径写好 * * @param dir * @param attrs * @return * @throws IOException */ @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { tarDirString = dir.toFile().getAbsolutePath(); tarDirString = tar + tarDirString.substring(rootPos) + File.separator; return FileVisitResult.CONTINUE; } 。
/*** * 到达文件之后,进行拷贝或者移动操作 * * @param file * @param attrs * @return * @throws IOException */ @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { File f = file.toFile(); if (f.exists() && f.canRead() && !f.isHidden()) realCopeOrMoveFile(file, tarDirString, type); return FileVisitResult.CONTINUE; } 。
@Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { 。
return FileVisitResult.CONTINUE; } 。
/*** * 到达文件夹后 * * @param dir * @param exc * @return * @throws IOException */ @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { return FileVisitResult.CONTINUE; } }); } catch (Exception e) { e.printStackTrace(); } // 如果是剪切操作,并且剪切成功,那么就要删除所有文件夹 if (OptionFile_TYPE.MOVE.equals(type) && isBlockDir(src)) delDir(src); } else throw new RuntimeException("指定父类文件夹层次错误~~~"); } 。
/*** * 根据指定层次获取指定盘符的位置 */ 。
private int getRootPosition(File file, int tier) { 。
if (file != null) { String path = file.getAbsolutePath(); int cc = 0; for (int i = path.length() - 1; i >= 0; i--) { if (path.charAt(i) == '\\') { cc++; if (cc == tier + 1) { cc = i; return cc; } } } } return -1; } 。
/*** * 查看该文件夹下是否还有文件 * * @param dirPath * @return */ private boolean isBlockDir(String dirPath) { 。
File dir = new File(dirPath); File[] dirList = dir.listFiles(); if (dirList == null || dirList.length == 0) return true; else { // 寻找文件 for (File f : dirList) if (!f.isDirectory()) return false; } return true; } 。
/*** * 删除空文件夹 * * @param dirPath */ private void delDir(String dirPath) { 。
File dir = new File(dirPath); File[] dirList = dir.listFiles(); if (dirList == null || dirList.length == 0) dir.delete(); else { // 删除所有文件 for (File f : dirList) if (f.isDirectory()) delDir(f.getAbsolutePath()); else f.delete(); // 删除完当前文件夹下所有文件后删除文件夹 dirList = dir.listFiles(); if (dirList.length == 0) dir.delete(); } } 。
/*** * 根据文件类型查找相关的文件 */ @Override public List<String> findFilesByType(String dir, String[] keys, boolean isMatchCase) throws IOException { 。
List<String> list = new ArrayList<String>(); Files.walkFileTree(Paths.get(dir), new FindFileUtil(keys, isMatchCase, list, FileTypeMode.TYPES)); return list; } 。
/*** * 根据文件名称查找相关的文件 */ @Override public List<String> findFilesByName(String dir, String[] keys, boolean isMatchCase) throws IOException { 。
List<String> list = new ArrayList<String>(); Files.walkFileTree(Paths.get(dir), new FindFileUtil(keys, isMatchCase, list, FileTypeMode.NAMES)); return list; } 。
public static void main(String[] args) throws IOException { 。
NewNIoInf inf = new NewNIO(); inf.copeOrMoveFile("e:/cc/dd/11.txt", "e:/XX/xxx/zzz/", OptionFile_TYPE.COPE); inf.copeOrMoveDirectory("e:\\BB\\CC\\DD", "e:\\",1, OptionFile_TYPE.MOVE); System.out.println(inf.findFilesByName("D:\\workspace", new String[] { "txt" }, false).size()),
} 。
} --------------------------- package com.xyq.io.enums,
/*** * 文件类型 * @author xyq * */ public enum FileTypeMode { TYPES,NAMES } 。
--------------------------------- package com.xyq.io.enums,
/*** * 操作文件的类型 * @author xyq * */ public enum OptionFile_TYPE { COPE,MOVE; } --------------------- package com.xyq.io.inf,
import java.io.IOException; import java.util.List,
import com.xyq.io.enums.OptionFile_TYPE,
public interface NewNIoInf { /*** * 拷贝或者移动文件 * @param src * @param tar * @return */ public boolean copeOrMoveFile(String src,String tar,OptionFile_TYPE type); /*** * 拷贝或者移动文件夹 * @param src * @param tar * @param tierSize 层次,拷贝完成后的路径0只是当前文件夹,+1就是加一级父类文件夹(但不拷贝父类内容) * @param type */ public void copeOrMoveDirectory(String src,String tar,int tierSize,OptionFile_TYPE type); /** * 根据文件类型查找相关文件集合,多种类型时用逗号隔开 * * @param dir * 目录 * @param keys * 文件类型 * @param isMatchCase * 是否区分大小写 * @return * @throws IOException */ List<String> findFilesByType(String dir, String[] keys, boolean isMatchCase) throws IOException; /** * 根据文件名称查找相关文件集合,多种民称时用逗号隔开 * * @param dir * 目录 * @param keys * 文件名称 * @param isMatchCase * 是否区分大小写 * @return * @throws IOException */ List<String> findFilesByName(String dir, String[] keys, boolean isMatchCase) throws IOException; } -------------------- package com.xyq.io.util,
import java.io.File; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.List,
import com.xyq.io.enums.FileTypeMode,
public class FindFileUtil extends SimpleFileVisitor<Path> { 。
/*** * 关键词列表,是否转换大小写,返回结果集 */ private String[] keyArray = null; private boolean isMatchCase; private List<String> resultList; private FileTypeMode mode,
public FindFileUtil(String[] keyArray, boolean isMatchCase, List<String> resultList, FileTypeMode mode) { 。
this.keyArray = keyArray; this.isMatchCase = isMatchCase; this.resultList = resultList; this.mode = mode; } 。
@SuppressWarnings("unused") private FindFileUtil() { } 。
@Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { File f = file.toFile(); if (f.exists() && f.canRead() && !f.isHidden()) if (this.keyArray != null) { for (String key : this.keyArray) { if (!this.isMatchCase) key = key.toLowerCase(); if (matchFile(file, this.mode, key, isMatchCase)) resultList.add(file.toString()); } } return FileVisitResult.CONTINUE; } 。
/*** * 根据大小写和类型或名称进行文件匹配 * * @param file * @param mode * @param key * @param isMatchCase * @return */ private boolean matchFile(Path file, FileTypeMode mode, String key, boolean isMatchCase) { 。
File f = file.toFile(); if (f.exists() && f.canRead() && !f.isHidden() && !"System Volume Information".equals(f.getName())) { String fileName = null; if (FileTypeMode.TYPES.equals(mode)) { 。
fileName = file.toString(); return isMatchCase ? fileName.endsWith(key) : fileName .toLowerCase().endsWith(key); } else if (FileTypeMode.NAMES.equals(mode)) { fileName = file.toFile().getName(); return isMatchCase ? (fileName.indexOf(key) == -1 ? false : true) : (fileName.toLowerCase().indexOf(key) == -1 ? false : true); } } return false; } 。
@Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { //如果错误信息中包含X:\System Volume Information,这是表示系统的隐藏盘,是不能读的 System.out.println(exc.getMessage()); return FileVisitResult.CONTINUE; } } -------------------------- package com.xyq.io.util,
import java.io.Closeable,
public class CloseIoUtil { /*** * 关闭IO流 * * @param cls */ public static void closeAll(Closeable... cls) { 。
if (cls != null) { for (Closeable cl : cls) { try { if (cl != null) cl.close(); } catch (Exception e) { 。
} finally { cl = null; } } } } } ----------------------------- package com.xyq.io.util,
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException,
import sun.misc.BASE64Encoder,
public class MD5Util { /*** * 加密字符串 * * @param str * @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static String EncoderStringByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException { 。
// 确定计算方法 MessageDigest md5 = MessageDigest.getInstance("MD5"); BASE64Encoder base64en = new BASE64Encoder(); // 加密后的字符串 String newstr = base64en.encode(md5.digest(str.getBytes("utf-8"))); return newstr; } 。
/*** * 加密文件 * * @param file * @return * @throws NoSuchAlgorithmException * @throws IOException */ public static String EncoderFileByMd5(File file) { String newstr = null; FileInputStream fis = null; BufferedInputStream bis = null; try { // 确定计算方法 MessageDigest md5 = MessageDigest.getInstance("MD5"); BASE64Encoder base64en = new BASE64Encoder(); byte[] buffer = new byte[1024]; fis = new FileInputStream(file); bis = new BufferedInputStream(fis); int length = -1; while ((length = bis.read(buffer)) != -1) md5.update(buffer, 0, length); // 加密后的字符串 newstr = base64en.encode(md5.digest()); } catch (Exception e) { e.printStackTrace(); } finally { CloseIoUtil.closeAll(bis, fis); } return newstr; } public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException { System.out.println(EncoderStringByMd5("23")); } } 。
。
最后此篇关于使用jdk7的nio2操作文件拷贝和剪切示例的文章就讲到这里了,如果你想了解更多关于使用jdk7的nio2操作文件拷贝和剪切示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有 2 个视频文件(input.mp4,leadout.mp4)和一个图像(watermark.png)。我需要将第一个视频剪切到 54 秒,添加水印,然后将其与第二个视频合并。 我实现了这个调用
在 VBA 中,您可以在剪切和粘贴后直接进行复制和粘贴。我之所以问,是因为 for 循环中的 If 语句需要剪切一行数据,然后直接在下面复制该行。当我运行代码时,它会执行该剪切,但不会执行副本。我在网
我想在剪切/粘贴事件触发后调用函数。 例如,当用户通过键盘或鼠标(带有上下文菜单)在编辑器中剪切/粘贴时,我想计算用户输入的字符数。 用户执行剪切/粘贴后有什么方法可以调用我们自己的函数吗? 最佳答案
抱歉,标题不准确,但实际上我正在尝试简化方法: Docker service ls 变成这个: Docker service ls cutted 尝试使用-f,但不起作用。 也许有一些grep / s
我有一个带有三角形的彩色噪声正方形。 现在,我希望多边形像圣诞节的“ cookies 切割器”一样减少这种噪音。导致被多边形路径包围的三角形噪声。 如何裁剪与多边形边框重叠的所有像素,然后将其另存为
我正在 Prolog 中开发一个谓词,它有可能在它结束之前终止。 出于这个原因,我正在寻找类似于 return; 的命令。 (C++)。我用了 cut !但我怀疑它的字面意思以及它是否确实做了什么re
我的代码如下所示: ServiceHandler sh = new ServiceHandler(); // Making a request to url and g
在 Linux(Raspbian 发行版)中,我试图提取文件名的日期部分,当我直接将其输入终端时,该文件名有效(见下文)。 $ file1="access_point20140821.csv" $ e
我正在使用 vuetify,我想制作一个可滚动的 stepper在对话框中。 这是一个代码笔 https://codepen.io/anon/pen/OqWQdy 我在 v-stepper-items
我有一个小测试站点,其中一个 div 的宽度减小到 50%,当我们单击按钮时另一个 div 出现。这是我的 codepen 当您单击该按钮时,图像会调整大小。因为我正在使用:background-si
我必须编写一个脚本文件来剪切以下列并将其粘贴到新 .arff 文件中同一行的末尾。我想文件类型无关紧要。 当前文件: 63,male,typ_angina,145,233,t,left_vent_hy
如何拦截此类事件? 当用户尝试将一些文本粘贴到我的 EditText 中时,我需要添加一些逻辑我知道我可以使用 TextWatcher 但这个入口点对我不利,因为我只在粘贴的情况下需要拦截,而不是每次
我有一个简单的自定义无边框 NSWindow 子类,它具有圆角矩形形状。 在此窗口的内容 View 中,我添加了一个 NSScrollView。 如何让 NSScrollView 将其文档 View
所以这是我的代码,但是每次尝试剪切字符串“words”都失败了,它只是用 jsoup 收到的整个文本执行 TextView。 我只想剪切字符串的前 x 个单词。 public class main e
Action Bar Select All/Cut/Copy not showing for EditText in Alert dialog(picture 2),请帮助 编辑:代码是
如何检测 tinymce 上的右键单击删除?我通过 onPaste 事件检测到粘贴事件,但我卡在剪切删除和复制上。我知道有 onContextMenu 事件,但似乎没有保存菜单项的函数或变量。 有什么
我有两个 JTextAreas 并且想要实现剪切、复制和粘贴菜单项。我知道 JTextArea.cut 和其他方法,但无法弄清楚如何确定用户在何处(在哪个 JTextArea 中)选择了文本和/或放置
我想在两侧“剪切”我的页面,如下所示: http://i.stack.imgur.com/ngZrp.jpg 演示:https://jsfiddle.net/r2g0eyxf/3/ #left {
我有一个绝对位于另一个元素之上的元素。问题是背景元素有一点 JS 可以根据鼠标的移动在 Y 轴上旋转。不幸的是,我在 Safari 中发现了一个在 Firefox 或 Chrome 中没有出现的问题。
我正在编写一个脚本,在该脚本中,我采用名片设计并使用它生成一张纸,上面有十张卡片,以匹配打印临时卡片的模板。这里最棘手的部分是出血;它们会在中间重叠,所以我需要为每个都制作剪贴蒙版。 我想出了一个系统
我是一名优秀的程序员,十分优秀!