- 浏览: 755609 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lgh1992314:
a offset: 26b offset: 24c offse ...
java jvm字节占用空间分析 -
ls0609:
语音实现在线听书http://blog.csdn.net/ls ...
Android 语音输入API使用 -
wangli61289:
http://viralpatel-net-tutorials ...
Android 语音输入API使用 -
zxjlwt:
学习了素人派http://surenpi.com
velocity宏加载顺序 -
tt5753:
谢啦........
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
文件和目录操作API,跟原来FILE IO做了很多改进,我们看看新的API,这个也是NIO操作的基础。
package com.mime; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.nio.file.DirectoryStream; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; import java.util.List; import java.util.Set; public class NIO2FileAndDir { /** * @param args */ public static void main(String[] args) { Path path = FileSystems.getDefault().getPath( System.getProperty("user.home"), "www", "pyweb.settings"); // 检查文件是否存在 exist, not exist, or unknown. // !Files.exists(...) is not equivalent to Files.notExists(...) and the // notExists() method is not a complement of the exists() method // 如果应用没有权限访问这个文件,则两者都返回false boolean path_exists = Files.exists(path, new LinkOption[] { LinkOption.NOFOLLOW_LINKS }); boolean path_notexists = Files.notExists(path, new LinkOption[] { LinkOption.NOFOLLOW_LINKS }); System.out.println(path_exists); System.out.println(path_notexists); // 检测文件访问权限 boolean is_readable = Files.isReadable(path); boolean is_writable = Files.isWritable(path); boolean is_executable = Files.isExecutable(path); boolean is_regular = Files.isRegularFile(path, LinkOption.NOFOLLOW_LINKS); if ((is_readable) && (is_writable) && (is_executable) && (is_regular)) { System.out.println("The checked file is accessible!"); } else { System.out.println("The checked file is not accessible!"); } // 检测文件是否指定同一个文件 Path path_1 = FileSystems.getDefault().getPath( System.getProperty("user.home"), "www", "pyweb.settings"); Path path_2 = FileSystems.getDefault().getPath( System.getProperty("user.home"), "www", "django.wsgi"); Path path_3 = FileSystems.getDefault().getPath( System.getProperty("user.home"), "software/../www", "pyweb.settings"); try { boolean is_same_file_12 = Files.isSameFile(path_1, path_2); boolean is_same_file_13 = Files.isSameFile(path_1, path_3); boolean is_same_file_23 = Files.isSameFile(path_2, path_3); System.out.println("is same file 1&2 ? " + is_same_file_12); System.out.println("is same file 1&3 ? " + is_same_file_13); System.out.println("is same file 2&3 ? " + is_same_file_23); } catch (IOException e) { System.err.println(e); } // 检测文件可见行 try { boolean is_hidden = Files.isHidden(path); System.out.println("Is hidden ? " + is_hidden); } catch (IOException e) { System.err.println(e); } // 获取文件系统根目录 Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories(); for (Path name : dirs) { System.out.println(name); } // jdk6的API // File[] roots = File.listRoots(); // for (File root : roots) { // System.out.println(root); // } // 创建新目录 Path newdir = FileSystems.getDefault().getPath("/tmp/aaa"); // try { // Files.createDirectory(newdir); // } catch (IOException e) { // System.err.println(e); // } Set<PosixFilePermission> perms = PosixFilePermissions .fromString("rwxr-x---"); FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions .asFileAttribute(perms); try { Files.createDirectory(newdir, attr); } catch (IOException e) { System.err.println(e); } // 创建多级目录,创建bbb目录,在bbb目录下再创建ccc目录等等 Path newdir2 = FileSystems.getDefault().getPath("/tmp/aaa", "/bbb/ccc/ddd"); try { Files.createDirectories(newdir2); } catch (IOException e) { System.err.println(e); } // 列举目录信息 Path newdir3 = FileSystems.getDefault().getPath("/tmp"); try (DirectoryStream<Path> ds = Files.newDirectoryStream(newdir3)) { for (Path file : ds) { System.out.println(file.getFileName()); } } catch (IOException e) { System.err.println(e); } // 通过正则表达式过滤 System.out.println("\nGlob pattern applied:"); try (DirectoryStream<Path> ds = Files.newDirectoryStream(newdir3, "*.{png,jpg,bmp,ini}")) { for (Path file : ds) { System.out.println(file.getFileName()); } } catch (IOException e) { System.err.println(e); } // 创建新文件 Path newfile = FileSystems.getDefault().getPath( "/tmp/SonyEricssonOpen.txt"); Set<PosixFilePermission> perms1 = PosixFilePermissions .fromString("rw-------"); FileAttribute<Set<PosixFilePermission>> attr2 = PosixFilePermissions .asFileAttribute(perms1); try { Files.createFile(newfile, attr2); } catch (IOException e) { System.err.println(e); } // 写小文件 try { byte[] rf_wiki_byte = "test".getBytes("UTF-8"); Files.write(newfile, rf_wiki_byte); } catch (IOException e) { System.err.println(e); } // 读小文件 try { byte[] ballArray = Files.readAllBytes(newfile); System.out.println(ballArray.toString()); } catch (IOException e) { System.out.println(e); } Charset charset = Charset.forName("ISO-8859-1"); try { List<String> lines = Files.readAllLines(newfile, charset); for (String line : lines) { System.out.println(line); } } catch (IOException e) { System.out.println(e); } // 读写文件缓存流操作 String text = "\nVamos Rafa!"; try (BufferedWriter writer = Files.newBufferedWriter(newfile, charset, StandardOpenOption.APPEND)) { writer.write(text); } catch (IOException e) { System.err.println(e); } try (BufferedReader reader = Files.newBufferedReader(newfile, charset)) { String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { System.err.println(e); } // 不用缓存的输入输出流 String racquet = "Racquet: Babolat AeroPro Drive GT"; byte data[] = racquet.getBytes(); try (OutputStream outputStream = Files.newOutputStream(newfile)) { outputStream.write(data); } catch (IOException e) { System.err.println(e); } String string = "\nString: Babolat RPM Blast 16"; try (OutputStream outputStream = Files.newOutputStream(newfile, StandardOpenOption.APPEND); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(outputStream))) { writer.write(string); } catch (IOException e) { System.err.println(e); } int n; try (InputStream in = Files.newInputStream(newfile)) { while ((n = in.read()) != -1) { System.out.print((char) n); } } catch (IOException e) { System.err.println(e); } // 临时目录操作 String tmp_dir_prefix = "nio_"; try { // passing null prefix Path tmp_1 = Files.createTempDirectory(null); System.out.println("TMP: " + tmp_1.toString()); // set a prefix Path tmp_2 = Files.createTempDirectory(tmp_dir_prefix); System.out.println("TMP: " + tmp_2.toString()); // 删除临时目录 Path basedir = FileSystems.getDefault().getPath("/tmp/aaa"); Path tmp_dir = Files.createTempDirectory(basedir, tmp_dir_prefix); File asFile = tmp_dir.toFile(); asFile.deleteOnExit(); } catch (IOException e) { System.err.println(e); } String tmp_file_prefix = "rafa_"; String tmp_file_sufix = ".txt"; try { // passing null prefix/suffix Path tmp_1 = Files.createTempFile(null, null); System.out.println("TMP: " + tmp_1.toString()); // set a prefix and a suffix Path tmp_2 = Files.createTempFile(tmp_file_prefix, tmp_file_sufix); System.out.println("TMP: " + tmp_2.toString()); File asFile = tmp_2.toFile(); asFile.deleteOnExit(); } catch (IOException e) { System.err.println(e); } // 删除文件 try { boolean success = Files.deleteIfExists(newdir2); System.out.println("Delete status: " + success); } catch (IOException | SecurityException e) { System.err.println(e); } // 拷贝文件 Path copy_from = Paths.get("/tmp", "draw_template.txt"); Path copy_to = Paths .get("/tmp/bbb", copy_from.getFileName().toString()); try { Files.copy(copy_from, copy_to); } catch (IOException e) { System.err.println(e); } try (InputStream is = new FileInputStream(copy_from.toFile())) { Files.copy(is, copy_to); } catch (IOException e) { System.err.println(e); } //移动文件 Path movefrom = FileSystems.getDefault().getPath( "C:/rafaelnadal/rafa_2.jpg"); Path moveto = FileSystems.getDefault().getPath( "C:/rafaelnadal/photos/rafa_2.jpg"); try { Files.move(movefrom, moveto, StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { System.err.println(e); } } }
输出:
true false The checked file is not accessible! is same file 1&2 ? false is same file 1&3 ? true is same file 2&3 ? false Is hidden ? false / java.nio.file.FileAlreadyExistsException: /tmp/aaa .ICE-unix gpg-LOz0cL .org.chromium.Chromium.YKWsQJ hsperfdata_weijianzhongwj kde-weijianzhongwj pulse-qKcxuRTsGUob scim-im-agent-0.3.0.socket-1000@localhost:0.0 scim-helper-manager-socket-weijianzhongwj ksocket-weijianzhongwj virtuoso_Lh2135.ini scim-socket-frontend-weijianzhongwj scim-panel-socket:0-weijianzhongwj .X0-lock pulse-j0jluTvI3Pe6 sni-qt_kaccessibleapp_2026-mEz8Dy .X11-unix akonadi-weijianzhongwj.mjmToI ssh-mfuayNh73d7Q virt_1111 aaa pulse-PKdhtXMmr18n fcitx-socket-:0 Glob pattern applied: [B@cd32e5 test test Vamos Rafa! Racquet: Babolat AeroPro Drive GT String: Babolat RPM Blast 16TMP: /tmp/3892364837850046417 TMP: /tmp/nio_5078970948266789689 TMP: /tmp/7342813580436243519.tmp TMP: /tmp/rafa_47993266069276248.txt Delete status: true java.nio.file.NoSuchFileException: /tmp/draw_template.txt java.io.FileNotFoundException: /tmp/draw_template.txt (没有那个文件或目录) java.nio.file.NoSuchFileException: C:/rafaelnadal/rafa_2.jpg
发表评论
-
对字符串进行验证之前先进行规范化
2013-09-17 23:18 13957对字符串进行验证之前先进行规范化 应用系统中经常对字 ... -
使用telnet连接到基于spring的应用上执行容器中的bean的任意方法
2013-08-08 09:17 1482使用telnet连接到基于spring的应用上执行容器中 ... -
jdk7和8的一些新特性介绍
2013-07-06 16:07 10114更多ppt内容请查看:htt ... -
java对于接口和抽象类的代理实现,不需要有具体实现类
2013-06-12 09:50 2957原文链接:http://www.javaarch.net/j ... -
Java EE 7中对WebSocket 1.0的支持
2013-06-05 09:27 3846原文链接:http://www.javaarch.n ... -
Java Web使用swfobject调用flex图表
2013-05-28 19:05 1128Java Web使用swfobject调用 ... -
spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
2013-05-21 15:57 3344spring使用PropertyPlaceholderCon ... -
java国际化
2013-05-20 20:57 4478java国际化 本文来自:http://www.j ... -
RSS feeds with Java
2013-05-20 20:52 1226RSS feeds with Java 原文来自:htt ... -
使用ibatis将数据库从oracle迁移到mysql的几个修改点
2013-04-29 10:40 1679我们项目在公司的大战略下需要从oracle ... -
线上机器jvm dump分析脚本
2013-04-19 10:48 2912#!/bin/sh DUMP_PIDS=`p ... -
eclipse远程部署,静态文件实时同步插件
2013-04-06 20:18 5469eclipse 远程文件实时同步,eclipse远程 ... -
java价格处理的一个问题
2013-03-26 21:21 1842我们经常会处理一些价格,比如从运营上传的文件中将某 ... -
java 服务降级开关设计思路
2013-03-23 16:35 3772java 服务屏蔽开关系统,可以手工降级服务,关闭服 ... -
poi解析excel内存溢出
2013-03-20 22:21 6406真是悲剧啊,一个破内部使用系统20多个人使用的后 ... -
简单web安全框架
2013-03-16 11:56 1551web安全框架,主要用servlet filter方 ... -
基于servlet的简单的页面缓存框架
2013-03-11 19:27 1222基于servlet的页面级缓存框架的基本用法: 代码参考: ... -
Eclipse使用过程中出现java.lang.NoClassDefFoundError的解决方案
2013-02-01 17:22 1583如果jdk,classpath设置正确,突然在eclipse ... -
jetty对于包的加载顺序的处理
2013-01-28 22:58 41421.问题 今天在本地和测试环境用jet ... -
hsqldb源码分析系列6之事务处理
2013-01-20 15:20 1712在session的 public Result ...
相关推荐
本书的核心在于介绍`java.nio.file.Path`类,它是NIO.2 API的一个关键组件,为文件和目录的操作提供了强大的支持。通过学习这本书,读者可以深入了解如何在Java应用程序中高效地进行文件I/O操作。 #### 二、Path类...
### Java NIO 处理超大数据文件的知识点详解 ...综上所述,使用Java NIO处理超大数据文件时,关键是利用好内存映射文件技术和合理的数据读取策略,通过适当的分块和数据解析方法,可以有效地提升读取速度和处理能力。
### Java-NIO2教程知识点详解 #### I/O发展简史 - **JDK1.0-1.3**: 在此期间,Java的I/O模型主要依赖于...这只是Java NIO2中众多强大功能之一,通过这些新的API,开发人员可以更高效、简洁地处理文件系统相关的操作。
`Pro Java 7 NIO.2`这本书由Anghel Leonard著,深入探讨了Java NIO.2 API,这是Java 7引入的进一步扩展,包括: 1. **文件系统API增强**:新增了AsynchronousFileChannel,支持异步文件操作,可以在后台线程中执行...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于标准Java IO API的处理I/O操作的方式。NIO的主要特点是面向缓冲区,非阻塞I/O,以及选择器,这些特性使得NIO在处理大量并发连接时表现出更高...
在Java中,可以使用java.nio.file包下的Files和Paths类来列出目录中的文件和子目录,获取文件的基本信息,如大小、修改时间等。 在实际开发中,我们还需要考虑错误处理、安全性(如权限控制)、性能优化(如批量...
《Pro Java 7 NIO》详细讲述了如何利用异步I/O API来开发异步socket应用程序,也包括了如何利用Java NIO.2中的FileVisitor API来开发递归文件操作,以及如何使用WatchService API和文件改变通知机制来监控文件系统的...
根据提供的文件信息,我们可以提取并总结出关于Java NIO(New Input/Output)的重要知识点。 ### Java NIO 概述 Java NIO 是 Java 平台的一个重要特性,首次出现在 Java 1.4 版本中。它为 Java 开发者提供了一套...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种新的方式来处理I/O操作,相比传统...通过理解其核心组件和操作机制,开发者可以充分利用NIO来优化文件读写性能,尤其是在高并发和大文件处理的场景下。
在Java 7的NIO2(JSR203:Java平台上的更多新I/O API)更新中,`java.nio.file.Path` 类成为了核心组件之一,为开发者提供了更高效、更直观的文件系统操作接口。本文将详细解析 `Path` 类的功能与应用,帮助读者掌握...
Java IO、NIO以及NIO.2是Java中用于处理输入/输出操作的三种主要机制。本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是...
根据提供的文件信息,“Pro Java 7 NIO.2.pdf”由Anghel Leonard于2011年编写,主要介绍了Java 7中的新输入/输出(NIO)API,特别是NIO.2(JSR 203)所带来的增强功能。这本书通过一系列章节详细讲解了如何使用NIO.2...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于传统IO(基于字节流和字符流)的I/O操作方式。传统的IO模型是阻塞式的,而NIO的核心特点是非阻塞,这使得在处理大量并发I/O请求时更为高效。...
NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据量的系统。Netty是一个基于NIO的高性能、异步事件驱动的网络应用框架,它简化了网络编程,广泛应用于服务器端应用开发。 ...
总之,NIO是Java处理大文件的一个强大工具,通过非阻塞I/O、通道、缓冲区和选择器,能够提高文件操作的效率,降低系统资源消耗,特别适合处理大数据量和并发场景。开发者在实际项目中可以根据需求选择合适的I/O模型...