Browse Source

Other

master
louzin 6 months ago
parent
commit
32b88ad151
  1. 211
      src/doc/other.md
  2. 103
      src/main/java/com/louzin/niodemo/asynchronoustest.java
  3. 36
      src/main/java/com/louzin/niodemo/charsetDemo.java
  4. 41
      src/main/java/com/louzin/niodemo/pathtest/pathcrud.java

211
src/doc/other.md

@ -0,0 +1,211 @@
# Path
## create
```java
public void createPath(){
//absolute
//win
Path path = Paths.get("c:\\a.txt");
//linux
Path path1 = Paths.get("/home/louzin/test");
//relative
Paths.get("basePath","relativePath");
Paths.get("d:\\a\\b","b\\c.txt");
}
```
## normalize
将路径标准化
```java
Path path2 = Paths.get("d:\\a\\b\\..\\c.txt");
path2.normalize();
System.out.println("d:\\a\\c.txt");
```
# Files
提供了文件操作基本方法
## Files.createDirectory(Path path)
根据path实例创建一个新目录
- 若目录已存在,则会FileAlreadyExistsException
- 若父目录不存在,则会IOException
## Files.copy(sourcePath,destinationPath)
- 第三个参数指定覆盖类型:StandardCopyOption.REPLACE_EXISTING
## Files.move(sourcePath,destinationPath)
- 第三个参数指定覆盖类型
## Files.delete(path)
删除文件
## Files.walkFileTree()
遍历目录树功能,将Path实例和FileVisitor作为参数
FileVisitor是一个接口,必须实现FileVisitor
FileVisitor接口方法每个都返回FileVisitResult枚举实例
- CONTINUE:继续
- TERMINATE:终止
- SKIP_SIBLING:跳过同级
- SKIP_SUBTREE:跳过子级
```java
public void findFileByName() throws IOException {
Path path = Paths.get("d:\\Warcraft III\\");
String fileToFind = File.separator+"注意事项.txt";
Files.walkFileTree(path,new SimpleFileVisitor<Path>(){
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attributes){
String fileString = file.toAbsolutePath().toString();
if(fileString.endsWith(fileToFind)){
System.out.println("find:"+file.toAbsolutePath());
return FileVisitResult.TERMINATE;
}
return FileVisitResult.CONTINUE;
}
});
}
```
# AsynchronousFileChannel
异步将数据写入文件
## Create AsynchronousFileChannel
```java
public void createAsynchronousFileChannel() throws IOException {
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel =
AsynchronousFileChannel.open(path, StandardOpenOption.READ);
}
```
## Future read data
```java
public void futureTest(){
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel = null;
try{
fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.READ);
}catch (Exception e){
}
ByteBuffer allocate = ByteBuffer.allocate(1024);
Future<Integer> read = fileChannel.read(allocate, 0);
while(!read.isDone()){
allocate.flip();
while(allocate.hasRemaining()){
System.out.println(allocate.get());
}
allocate.clear();
}
}
```
## CompletionHandle
```java
public void completHandletest(){
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel = null;
try{
fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.READ);
}catch (Exception e){
}
ByteBuffer allocate = ByteBuffer.allocate(1024);
fileChannel.read(allocate, 0, allocate, new CompletionHandler<Integer, ByteBuffer>() {
@Override
public void completed(Integer result, ByteBuffer attachment) {
System.out.println("result"+result);
attachment.flip();
while(attachment.hasRemaining()){
System.out.println(attachment.get());
}
attachment.clear();
}
@Override
public void failed(Throwable exc, ByteBuffer attachment) {
}
});
}
```
## Future write
```java
public void futureWrite(){
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel = null;
try{
fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.WRITE);
}catch (Exception e){
}
ByteBuffer allocate = ByteBuffer.allocate(1024);
allocate.put("louzin".getBytes(StandardCharsets.UTF_8));
allocate.flip();
Future<Integer> write = fileChannel.write(allocate, 0);
while (!write.isDone()){
}
allocate.clear();
System.out.println("write over");
}
```
## CompletionHandle Write
```java
public void completionHandleWrite(){
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel = null;
try{
fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.WRITE);
}catch (Exception e){
}
ByteBuffer allocate = ByteBuffer.allocate(1024);
allocate.put("louzin".getBytes(StandardCharsets.UTF_8));
allocate.flip();
fileChannel.write(allocate, 0, allocate, new CompletionHandler<Integer, ByteBuffer>() {
@Override
public void completed(Integer result, ByteBuffer attachment) {
System.out.println(result);
}
@Override
public void failed(Throwable exc, ByteBuffer attachment) {
}
});
}
```
# CharSet
字符集编码对象
```java
import java.nio.charset.Charset;
import java.util.SortedMap;
public static Charset forName(String charsetName) {
//通过编码类型获得CharSet对象
}
public static SortedMap<String,Charset> availableCharset(){
//获得系统支持的所有编码格式
}
public static Charset defaultCharset(){
//获取虚拟机的默认编码方式
}
public static boolean isSupported(String charsetName){
//判断支持该编码类型
}
public static String name(){
//获取CharSet对象的编码类型
}
```
```java
public void charSetTest() throws CharacterCodingException {
//get charset object
Charset charset = Charset.forName("UTF-8");
//get encoder
CharsetEncoder charsetEncoder = charset.newEncoder();
CharBuffer allocate = CharBuffer.allocate(1024);
allocate.put("这是UTF-8测试");
allocate.flip();
//encoder
ByteBuffer encode = charsetEncoder.encode(allocate);
System.out.println("编码后");
while (encode.hasRemaining()){
System.out.println(encode.get());
}
encode.flip();
//decoder
CharsetDecoder charsetDecoder = charset.newDecoder();
CharBuffer decode = charsetDecoder.decode(encode);
while (decode.hasRemaining()){
System.out.println(decode.get());
}
}
```

103
src/main/java/com/louzin/niodemo/asynchronoustest.java

@ -0,0 +1,103 @@
package com.louzin.niodemo;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousFileChannel;
import java.nio.channels.CompletionHandler;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.concurrent.Future;
public class asynchronoustest {
@Test
public void createAsynchronousFileChannel() throws IOException {
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel =
AsynchronousFileChannel.open(path, StandardOpenOption.READ);
}
@Test
public void futureTest(){
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel = null;
try{
fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.READ);
}catch (Exception e){
}
ByteBuffer allocate = ByteBuffer.allocate(1024);
Future<Integer> read = fileChannel.read(allocate, 0);
while(!read.isDone()){
allocate.flip();
while(allocate.hasRemaining()){
System.out.println(allocate.get());
}
allocate.clear();
}
}
@Test
public void completHandletest(){
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel = null;
try{
fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.READ);
}catch (Exception e){
}
ByteBuffer allocate = ByteBuffer.allocate(1024);
fileChannel.read(allocate, 0, allocate, new CompletionHandler<Integer, ByteBuffer>() {
@Override
public void completed(Integer result, ByteBuffer attachment) {
System.out.println("result"+result);
attachment.flip();
while(attachment.hasRemaining()){
System.out.println(attachment.get());
}
attachment.clear();
}
@Override
public void failed(Throwable exc, ByteBuffer attachment) {
}
});
}
@Test
public void futureWrite(){
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel = null;
try{
fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.WRITE);
}catch (Exception e){
}
ByteBuffer allocate = ByteBuffer.allocate(1024);
allocate.put("louzin".getBytes(StandardCharsets.UTF_8));
allocate.flip();
Future<Integer> write = fileChannel.write(allocate, 0);
while (!write.isDone()){
}
allocate.clear();
System.out.println("write over");
}
@Test
public void completionHandleWrite(){
Path path = Paths.get("d:\\a.txt");
AsynchronousFileChannel fileChannel = null;
try{
fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.WRITE);
}catch (Exception e){
}
ByteBuffer allocate = ByteBuffer.allocate(1024);
allocate.put("louzin".getBytes(StandardCharsets.UTF_8));
allocate.flip();
fileChannel.write(allocate, 0, allocate, new CompletionHandler<Integer, ByteBuffer>() {
@Override
public void completed(Integer result, ByteBuffer attachment) {
System.out.println(result);
}
@Override
public void failed(Throwable exc, ByteBuffer attachment) {
}
});
}
}

36
src/main/java/com/louzin/niodemo/charsetDemo.java

@ -0,0 +1,36 @@
package com.louzin.niodemo;
import org.junit.jupiter.api.Test;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class charsetDemo {
@Test
public void charSetTest() throws CharacterCodingException {
//get charset object
Charset charset = Charset.forName("UTF-8");
//get encoder
CharsetEncoder charsetEncoder = charset.newEncoder();
CharBuffer allocate = CharBuffer.allocate(1024);
allocate.put("这是UTF-8测试");
allocate.flip();
//encoder
ByteBuffer encode = charsetEncoder.encode(allocate);
System.out.println("编码后");
while (encode.hasRemaining()){
System.out.println(encode.get());
}
encode.flip();
//decoder
CharsetDecoder charsetDecoder = charset.newDecoder();
CharBuffer decode = charsetDecoder.decode(encode);
while (decode.hasRemaining()){
System.out.println(decode.get());
}
}
}

41
src/main/java/com/louzin/niodemo/pathtest/pathcrud.java

@ -0,0 +1,41 @@
package com.louzin.niodemo.pathtest;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class pathcrud {
@Test
public void createPath(){
//absolute
//win
Path path = Paths.get("c:\\a.txt");
//linux
Path path1 = Paths.get("/home/louzin/test");
//relative
Paths.get("basePath","relativePath");
Paths.get("d:\\a\\b","b\\c.txt");
Path path2 = Paths.get("d:\\a\\b\\..\\c.txt");
path2.normalize();
System.out.println("d:\\a\\c.txt");
}
@Test
public void findFileByName() throws IOException {
Path path = Paths.get("d:\\Warcraft III\\");
String fileToFind = File.separator+"注意事项.txt";
Files.walkFileTree(path,new SimpleFileVisitor<Path>(){
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attributes){
String fileString = file.toAbsolutePath().toString();
if(fileString.endsWith(fileToFind)){
System.out.println("find:"+file.toAbsolutePath());
return FileVisitResult.TERMINATE;
}
return FileVisitResult.CONTINUE;
}
});
}
}
Loading…
Cancel
Save