- 浏览: 136678 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
qq466862016:
不错的文章
JDK动态代理与CGLIB代理的对比 -
jinxiongyi:
你好,jpedal pdf转换图片的 画质,怎么提高。。我转 ...
介绍几款PDF转图片的开源工具 -
qqdwll:
转图片消耗的内存还是不小。 有时间得找找有没有更好的办法, 把 ...
介绍几款PDF转图片的开源工具 -
xiaoyao3857:
Thanks for your work!It's help ...
Keeping Eclipse running clean (转载) -
iceside:
图片讲解非常详细,说清了引用复制是怎么回事
Java 值传递的终极解释
我们用例子说明java怎样通过不同的方式移动文件或文件夹。
首先, 我们先介绍通过流的例子,你可以很容易把指定的源文件或文件夹移动到目标文件夹中。
程序中, 你需要指定源文件/文件夹和目标文件夹的绝对路径。 如果指定的源文件(夹)不存在, 程序打印出提示信息"File or directory does not exist.", 然后从控制台中推出程序。 如果指定的目标文件夹不存在,程序会提示你是否创建一个新的文件夹。 通过输入"y", 程序就会为你创建一个新的文件夹并且把源文件全部移动到目标文件夹中。 当目标文件夹存在时, 它会征询你是否替换掉已经存在的文件夹。
File object 有个方法叫renameTo, 但这个方法是平台相关的。 我在windows 平台上测试过可以成功。 但没在linux上测试, 所以不清楚这个方法在其它平台上运行的结果。 要是有测试过的朋友, 可以给我留言。 谢谢。
如果可以用这个方法的话, 那方法 copyFile(File source, File dest) 就很简单了, 只需写成:
通过NIO的方。
流移动文件, 有个潜在的性能问题, 主要是缓存的原因。 在实际情况下, 需要优化缓存的大小以达到最优的情况。 一般文件不是很大的情况, 在windons下, 2k比较快。NIO就不需要人为的设置缓存了。 但nio的话, 对于超大文件, 几百M或者上G的话, 性能不是很乐观。 但小文件的话, 如果流的缓存没有配置好。nio 的性能是很快的。下面我们用nio的方式新建一个方法替换 copyFile(File source, File dest):
但是, Windows, based on configuration, uses either executes a native copy or does the Stream-based copy. Solaris and AIX always uses the Channel implementation.
所以, 对于移动大文件的话, 最好是用流的方式。 那我们干脆判断一下, 如果是大文件, 就用流, 否则就用nio的方式。 我们对copyDirectory(File sourceDir, File destDir)方法改造下:
首先, 我们先介绍通过流的例子,你可以很容易把指定的源文件或文件夹移动到目标文件夹中。
程序中, 你需要指定源文件/文件夹和目标文件夹的绝对路径。 如果指定的源文件(夹)不存在, 程序打印出提示信息"File or directory does not exist.", 然后从控制台中推出程序。 如果指定的目标文件夹不存在,程序会提示你是否创建一个新的文件夹。 通过输入"y", 程序就会为你创建一个新的文件夹并且把源文件全部移动到目标文件夹中。 当目标文件夹存在时, 它会征询你是否替换掉已经存在的文件夹。
package io; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import javax.swing.JOptionPane; public class MovingFile { public static void main(String[] args) throws IOException { int a = 0; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out .print("Enter the file or directory name that has to be moved : "); String src = in.readLine(); if (src.equals("")) { System.out.println("Invalid directory or file name."); System.exit(0); } File source = new File(src); if (!source.exists()) { System.out.println("File or directory does not exist."); System.exit(0); } System.out .print("Enter the complete path where file or directory has to be moved: "); String dest = in.readLine(); if (dest.equals("")) { System.out.println("Invalid directory or file name."); System.exit(0); } File destination = new File(dest); if (!destination.exists()) { System.out .print("Mentioned directory does not exist. \nDo you want to create a new directory(Y/N)? "); String chk = in.readLine(); if (chk.equals("Y") || chk.equals("y")) { destination.mkdir(); copyDirectory(source, destination); a = 1; } else if (chk.equals("N") || chk.equals("n")) { System.exit(0); } else { System.out.println("Invalid Entry!"); System.exit(0); } } else { int num = JOptionPane .showConfirmDialog(null, "Given file or folder name already exists. \nDo you want to replace now?"); if (num == 0) { copyDirectory(source, destination); a = 1; } } if (a == 1) { System.out.println("File or directory moved successfully."); if (!delete(source)) { throw new IOException("Unable to delete original folder"); } } else if (a == 0) { System.exit(0); } } public static void copyDirectory(File sourceDir, File destDir) throws IOException { if (!destDir.exists()) { destDir.mkdir(); } File[] children = sourceDir.listFiles(); for (File sourceChild : children) { String name = sourceChild.getName(); File destChild = new File(destDir, name); if (sourceChild.isDirectory()) { copyDirectory(sourceChild, destChild); } else { copyFile(sourceChild, destChild); } } } public static void copyFile(File source, File dest) throws IOException { if (!dest.exists()) { dest.createNewFile(); } InputStream in = null; OutputStream out = null; try { in = new FileInputStream(source); out = new FileOutputStream(dest); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } } finally { in.close(); out.close(); } } public static boolean delete(File resource) throws IOException { if (resource.isDirectory()) { File[] childFiles = resource.listFiles(); for (File child : childFiles) { delete(child); } } return resource.delete(); } }
File object 有个方法叫renameTo, 但这个方法是平台相关的。 我在windows 平台上测试过可以成功。 但没在linux上测试, 所以不清楚这个方法在其它平台上运行的结果。 要是有测试过的朋友, 可以给我留言。 谢谢。
如果可以用这个方法的话, 那方法 copyFile(File source, File dest) 就很简单了, 只需写成:
public static void copyFile(File source, File dest) throws IOException { source.renameTo(dest); }
通过NIO的方。
流移动文件, 有个潜在的性能问题, 主要是缓存的原因。 在实际情况下, 需要优化缓存的大小以达到最优的情况。 一般文件不是很大的情况, 在windons下, 2k比较快。NIO就不需要人为的设置缓存了。 但nio的话, 对于超大文件, 几百M或者上G的话, 性能不是很乐观。 但小文件的话, 如果流的缓存没有配置好。nio 的性能是很快的。下面我们用nio的方式新建一个方法替换 copyFile(File source, File dest):
public static void copyFileWithNIO(File sourceFile, File destFile) throws IOException { if (!destFile.exists()) { destFile.createNewFile(); } FileChannel source = null; FileChannel destination = null; long count = 0; try { source = new FileInputStream(sourceFile).getChannel(); long size = source.size(); destination = new FileOutputStream(destFile).getChannel(); while( (count += destination.transferFrom(source, count, size-count)) < size ); } finally { if (source != null) { source.close(); } if (destination != null) { destination.close(); } } }
但是, Windows, based on configuration, uses either executes a native copy or does the Stream-based copy. Solaris and AIX always uses the Channel implementation.
所以, 对于移动大文件的话, 最好是用流的方式。 那我们干脆判断一下, 如果是大文件, 就用流, 否则就用nio的方式。 我们对copyDirectory(File sourceDir, File destDir)方法改造下:
public static void copyDirectory(File sourceDir, File destDir) throws IOException { if (!destDir.exists()) { destDir.mkdir(); } File[] children = sourceDir.listFiles(); for (File sourceChild : children) { String name = sourceChild.getName(); File destChild = new File(destDir, name); if (sourceChild.isDirectory()) { copyDirectory(sourceChild, destChild); } else { long fileSize = sourceChild.length(); // for larger files (20Mb) use streams if ( fileSize > 20971520l ) copyFile(sourceChild, destChild); else copyFileWithNIO (sourceChild, destChild); } } }
发表评论
-
介绍几款PDF转图片的开源工具
2011-09-09 00:40 4607最近项目中有个需求需要把PDF转成一张图。经过调查,有 ... -
jadclipse(反编译Eclipse插件)
2011-07-19 19:13 1665Jad Java decompiler plugin for ... -
Java开发时候的内存溢出
2011-07-13 17:33 1200这里以tomcat环境为例, ... -
class loader
2011-07-08 17:23 0Because Class.getResource() eve ... -
Jakarta-Common-BeanUtils使用笔记
2011-07-06 16:55 1403原文转发http://blog.csdn.net/fa ... -
基于MVC模式Struts框架研究
2011-04-13 20:02 1359不做web开发多年了, 可偶尔去面试的时候, 还是 ... -
Java反射与动态代理
2011-04-13 15:08 1021这篇文章是 成富 先生在InfoQ上Java 深度历险系列的一 ... -
Java枚举类型
2011-04-04 19:50 795Tiger中的一个重要新特性是枚举构造,它是一种新的Java枚 ... -
Java 值传递的终极解释
2011-03-21 22:49 1984对于Java的值传递, 你真的了解么? Ja ... -
六种异常处理的陋习
2011-03-20 03:21 838你觉得自己是一个Java专 ... -
数组初始化
2011-03-20 02:40 896数组初始化,你觉得简单吗? a.如果你觉得简单,那请看下面的 ... -
Java 实现 hashCode 方法
2011-03-11 17:07 1219原文 http://www.javapractices.com ... -
Java 中 immutable class 以及怎样实现immutable 类
2011-03-11 16:47 1374原文 http://www.javapractices.com ... -
Java 内部类介绍
2011-02-16 17:14 1011转载: http://zhidao.baidu.com/que ... -
Java 中的Clone 学习总结
2011-01-25 18:22 27891. 一个类需要实现clone. 一个最佳实践是它需要实现 C ... -
转 深入探讨SOAP、RPC和RMI
2010-12-17 00:34 1083这篇文章是从网上转下来的。 原文应该是写于2001年。 10 ... -
java 6 中的性能优化
2010-12-07 15:30 1451文章转载自: http://www ... -
创建强健,稳定的 JMS 系统
2010-12-07 15:21 991The most reliable way to produc ... -
Java Modifier Summary
2010-11-12 15:10 899<tbody> <tr> ... -
[ZT] 怎样停止一个线程或者任务
2010-11-12 15:08 1013source file http://forward.com. ...
相关推荐
在Java编程语言中,移动文件夹下所有文件是一项常见的任务,尤其在处理文件系统操作时。这个场景描述了一个程序能够遍历指定文件夹中的所有文件,并将它们移动到另一个目标文件夹,同时保持原有的文件结构。这样的...
根据提供的文件标题、描述、标签以及部分内容,我们可以总结出以下几个重要的Java知识点,这些知识点与文件操作密切相关: ### 1. 文件和目录的基本操作 #### 1.1 创建目录(文件夹) ```java public static void...
在处理这些文件时,确保正确地读取、写入或移动它们,通常需要使用`InputStream`和`OutputStream`进行字节流操作,或者使用`Files.copy()`方法。 总之,Java提供的API使得移动指定目录下的文件变得简单而直观。通过...
Java编写的命令行文件/文件夹管理程序是一个实用工具,它允许用户通过命令行界面执行常见的文件操作。这种程序在开发、系统管理或者需要高效批量处理文件的场景中非常常见。下面将详细介绍这个程序可能涉及的主要...
为了读取文件夹下的所有文件,我们可以使用`java.nio.file.Files`类中的`newDirectoryStream`方法。该方法可以获取文件夹下的所有子项,并遍历这些子项进行进一步的操作。 ```java Path path = new File(pathname)....
`copyFile.java`源码文件为我们提供了一个基础的实现,通过理解和扩展这个代码,我们可以根据实际需求构建更强大、更高效的文件拷贝功能。在开发过程中,理解并掌握这些核心概念和方法,对于任何Java开发者来说都是...
总的来说,"spring boot文件夹文件监听程序"是一个结合了Java文件系统监听和Spring Boot自动化功能的实用工具,它可以实时监控指定目录,及时响应文件变化,对于文件管理、数据同步等场景具有很高的价值。通过理解并...
1. **文件操作**:Java中的`java.io`和`java.nio`包提供了丰富的文件操作API,包括读取、写入、移动和删除文件。 2. **文件打包**:Java的`java.util.zip`包提供了`ZipOutputStream`类,可以用来创建ZIP格式的压缩...
为了实现"打开指定的文件以及文件夹"的功能,开发者通常会使用操作系统提供的API,如Windows的Shell32库,或者是跨平台的库如Python的`os`和`shutil`模块,或者是Java的`java.io`和`java.nio`包。这些API允许程序...
Java程序“Java程序_复制文件.jar”是一个基于Java平台的实用工具,主要目的是演示如何在Java中实现文件的复制和移动操作。这个程序对于正在学习Java输入/输出(IO)和Swing GUI库的学生来说是一个很好的参考实例。...
Java的`java.nio.file`包提供了丰富的文件操作接口,如`Files.setPosixFilePermissions()`和`Files.newFileChannel()`,可以用来设置权限和创建文件通道进行锁定。 7. **文件自动加密**:文件加密通常涉及对文件...
2. **用户界面交互**:用户可以通过简单的拖放操作或选择菜单来上传文件或文件夹。这种直观的交互方式使得文件传输过程对非技术人员也十分友好。 3. **NIO技术**:Java的New IO (NIO) API提供了一种非阻塞的I/O模型...
Path类是java.nio.file包中的一个抽象类,提供了许多方法来操作文件和文件夹。Path类可以在任何文件系统和存储空间上操作文件,默认情况下,Path类引用默认文件系统的文件,但NIO2也是完全模块化的,可以在网络环境...
这个管理器利用Java语言的强大功能,通过命令行界面提供了一系列基本的文件和目录操作,如复制、移动、删除等。在没有图形用户界面(GUI)的情况下,这样的工具对于远程服务器或自动化脚本场景尤其有用。 首先,让...
3. **删除文件**:`delete()`方法用于删除文件,但只有文件为空或者文件已被关闭时才能成功删除。 4. **删除文件夹**:`delete()`方法同样可以删除空文件夹,非空文件夹则需要递归删除其中的所有文件后再删除。 5....
Java标准库没有直接提供剪切(剪切后移动)文件或文件夹的功能。但可以通过先复制目标,然后删除源文件或文件夹来实现类似的效果。需要注意处理可能出现的异常,如文件正在被使用导致无法删除等。 ```java ...
这样的系统通常包括一系列核心功能,如文件的创建、读取、更新和删除,以及目录(文件夹)的操作,如创建、浏览和移动。以下是关于Java文件管理系统的一些关键知识点: 1. **Java I/O流**:Java I/O流是文件管理...
对于更复杂的文件操作,如复制、移动或删除文件,可以使用`java.nio.file`包中的`Files`类。例如,复制一个文件: ```java Path source = Paths.get("source_file_path"); Path target = Paths.get("target_file_...
在Java编程语言中,"文件夹拷贝"是一项...通过递归遍历目录和使用流操作拷贝文件,我们可以轻松地在不同位置之间移动或复制文件夹结构。这个过程在软件开发中是不可或缺的,尤其是在涉及到大量数据转移或备份的场景下。
这意味着系统可能使用了Java的文件I/O流来读取、创建、删除和移动文件,比如`java.io.File`类用于文件操作,`java.nio`包提供非阻塞I/O功能,使得在处理大量文件时更加高效。同时,系统可能使用了文件夹遍历的递归...