FileUtil .java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
/** *//**
* @author lichun
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class FileUtil ...{
public static ByteBuffer readFile(String filename) throws Exception
...{
FileChannel fiChannel = new FileInputStream(filename).getChannel();
MappedByteBuffer mBuf;
mBuf = fiChannel.map(FileChannel.MapMode.READ_ONLY, 0, fiChannel.size());
fiChannel.close();
fiChannel = null;
return mBuf;
}
public static void saveFile(ByteBuffer src, String filename) throws Exception
...{
FileChannel foChannel = new FileOutputStream(filename).getChannel();
foChannel.write(src);
foChannel.close();
foChannel = null;
}
public static void saveFile(FileChannel fiChannel, String filename) throws IOException
...{
MappedByteBuffer mBuf;
mBuf = fiChannel.map(FileChannel.MapMode.READ_ONLY, 0, fiChannel.size());
FileChannel foChannel = new FileOutputStream(filename).getChannel();
foChannel.write(mBuf);
fiChannel.close();
foChannel.close();
fiChannel = null;
foChannel = null;
}
public static void main(String[] args) throws Exception
...{
final String suffix = ".txt";
final String filename = "bufferTemp";
final String srcFile = filename + suffix ;
final String backupFile = filename + "-" + System.currentTimeMillis() + suffix;
ByteBuffer byteBuffer = FileUtil.readFile(srcFile);
FileUtil.saveFile(byteBuffer, backupFile);
byteBuffer = null;
}
}
TransferFile.java
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.*;
/** *//**
* @author lichun
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TransferFile ...{
private String srcFile;
List files = new ArrayList();
ByteBuffer byteBuffer;
public TransferFile()
...{
createFileNames();
}
private void createFileNames()
...{
for (int i = 0; i < 10; i++)
...{
files.add(i + "");
}
}
public List getFiles()
...{
return this.files;
}
public String getSrcFile() ...{
return srcFile;
}
public void setSrcFile(String srcFile) ...{
this.srcFile = srcFile;
}
public void saveFiles() throws FileNotFoundException
...{
String tempFile;
for (int i = 0; i < this.files.size(); i++)
...{
tempFile = "test-files/" + (String)files.get(i) + ".txt";
System.out.println("begin create thread for " + tempFile);
FileChannel fiChannel = new FileInputStream(this.srcFile).getChannel();
WriteFileThread writeFileThread = new WriteFileThread("writeFile", fiChannel, tempFile);
writeFileThread.start();
}
}
public static void main(String[] args) throws Exception
...{
final String srcFile = "test-files/transferFile.txt";
TransferFile transferFile = new TransferFile();
transferFile.setSrcFile(srcFile);
transferFile.saveFiles();
}
}
WriteFileThread.java
import java.nio.channels.FileChannel;
/** *//**
* @author lichun
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class WriteFileThread extends Thread ...{
private FileChannel fiChannel;
private String fileName;
public WriteFileThread(String name)
...{
super(name);
}
public WriteFileThread(String name, FileChannel fiChannel, String fileName)
...{
this(name);
this.fiChannel = fiChannel;
this.fileName = fileName;
}
public void setFiChannel(FileChannel fiChannel)
...{
this.fiChannel = fiChannel;
}
public FileChannel getFiChannel() ...{
return fiChannel;
}
public void setFileName(String fileName) ...{
this.fileName = fileName;
}
public String getFileName() ...{
return fileName;
}
public void run()
...{
System.out.println("in Thread: " + this.getName());
try ...{
FileUtil.saveFile(this.fiChannel, this.fileName);
} catch (Exception e) ...{
System.out.println("The file is not founded: " + fileName);
e.printStackTrace();
}
System.out.println("end Thread: " + this.getName());
}
}
分享到:
相关推荐
本主题“基于nio实现的多文件上传源码”探讨的是如何利用Java NIO来实现高效的多文件上传功能,尤其对于小文件数量较大的情况。 首先,理解NIO的基本概念是必要的。NIO中的“非阻塞”意味着当数据不可用时,读写...
Java NIO提供了一种高效、灵活的文件操作方式,通过Buffer、Channel、Paths和Files等核心组件,可以实现复杂的文件读写操作。NIO的异步操作特性也使得它在处理大量并发文件操作时具有显著的性能优势。在实际开发中,...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种新的方式来处理I/O操作,相比传统...通过理解其核心组件和操作机制,开发者可以充分利用NIO来优化文件读写性能,尤其是在高并发和大文件处理的场景下。
通过`FileChannel.map()`方法,可以直接将文件映射到内存中,这样读写文件就像操作内存一样快速。但需要注意的是,内存映射文件可能会消耗大量内存,因此对于大文件操作要谨慎使用。 5. **选择器(Selectors)** ...
- **FileChannel**:用于与文件进行交互的Channel,提供了读写操作的支持。 #### 三、使用Java NIO读取超大数据文件 在Java NIO中,处理超大数据文件的关键在于合理利用内存映射文件(Memory-Mapped Files)来提高...
为了解决这个问题,Java引入了New Input/Output (NIO) 模型,它提供了非阻塞I/O操作,使得在处理大文件时更加高效。本文将深入探讨如何使用NIO处理大文件,并分析其背后的机制和优势。 1. NIO简介: NIO是Java 1.4...
Java文件读写IO/NIO及性能比较详细代码及总结 Java文件读写是Java编程中一个非常重要的方面,在各种项目中都需要对文件进行读写操作。Java提供了多种方式来实现文件读写,包括字节读写、字符读取、行读取等。以下是...
在本篇文章中,我们将深入探讨Java NIO如何读取文件。 一、NIO的基本概念 1. 缓冲区(Buffer):NIO的核心组件,用于存储数据。Java提供了多种Buffer类,如ByteBuffer、CharBuffer、IntBuffer等,分别对应不同数据...
在Java编程语言中,文件读写操作是程序与外部数据交互的基本能力。这篇学习笔记将带你初探这个领域,适合新手入门。我们将讨论如何使用Java进行文件的读取、写入以及一些常见的应用场景。 首先,Java提供了java.io...
1. **Channel**:在NIO中,数据读写是通过Channel进行的,它像一个管道,可以从一个源头(如文件或网络连接)到目的地(如另一个文件或网络连接)传输数据。例如,FileChannel可以用来读取和写入文件。 2. **Buffer...
1. **FileChannel**:`java.nio.channels.FileChannel`是用于读写文件的通道,可以从一个文件通道向另一个文件通道直接传输数据,避免了中间缓冲区的开销。在文件复制中,我们通常使用`transferTo()`和`transferFrom...
在Android系统中,文件读写是一项基础且重要的操作,它涉及到对SD卡上的文件和应用程序内部资源文件的处理。理解并掌握文件读写是开发Android应用的必要技能,特别是对于存储用户数据、日志记录或者资源加载等场景。...
本篇文章将详细探讨Android平台上SD卡的文件读写操作,这对于开发者来说是一项基本且重要的技能。 一、Android权限设置 在进行SD卡文件读写之前,首先需要在AndroidManifest.xml文件中声明相应的权限。Android 6.0...
在给定的压缩包文件中,我们关注的是"FastCopyFile.java"、"UseFloatBuffer.java"以及NIO中的文件锁功能。 首先,让我们详细了解一下`FastCopyFile.java`。这个文件很可能是一个示例程序,演示了如何使用Java NIO...
`NIOServer.java`和`NIOClient.java`这两个文件很可能是用于演示Java NIO服务器端和客户端的基本操作。下面将详细介绍Java NIO的主要组件和工作原理,并结合这两个文件名推测它们可能包含的内容。 1. **Selector...
本项目提供的"文件分割器"包含两个版本,分别是基于传统Java IO(输入/输出流)实现的版本和基于NIO(非阻塞I/O)实现的版本。这两个版本都是在Linux环境下使用Eclipse开发的,因此它们都具有跨平台性,可以在支持...
`FileChannel`类是NIO中用于文件操作的通道,配合`ByteBuffer`可以实现高效的文件读写。 在性能测试中,通常我们会比较IO和NIO在处理相同任务时的耗时。`CopyFile.java`可能是用于对比两者的文件复制性能的代码示例...
在IT行业中,文件读写操作是程序开发中的基础部分,特别是在处理数据存储、日志记录、文件传输等场景。本文将结合标题“文件读写操作小结”和提供的标签“源码”、“工具”,深入探讨文件读写的核心概念、常见方法...
本文将深入解析Android文件读写源码,探讨如何在Android应用中创建、读取、修改和删除文件,并涉及权限管理和存储位置的选择。 首先,Android提供了`java.io`和`java.nio`两个包来支持文件操作。在`java.io`包中,`...
这个压缩包的示例代码可能包括了如何使用Java的IO和NIO API进行文件读写,以及如何利用`java.util.jar`包将文件打包成jar文件。学习和理解这些概念对于任何Java开发者来说都至关重要,特别是那些需要处理大量数据或...