文档章节

<BIO>以字节的方式(写入,读取)文本,以字符的方式(写入,读取)文本和<NIO>的写入,读取

1527
 1527
发布于 2016/05/08 00:34
字数 518
阅读 59
收藏 5
package v2ch01.textFile;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;

import org.junit.Test;

public class FileTest {


	/**
	 * 以字符的方式写入文本
	 * @throws FileNotFoundException
	 * @throws UnsupportedEncodingException
	 */
	@Test
	public  void writeWenBen() throws FileNotFoundException, UnsupportedEncodingException {

		PrintWriter out = new PrintWriter(new File("e://test.txt"),"utf-8");
		out.write("abcde");
//		out.flush();
		out.close();
		
	}
	
	/**
	 * 以字符的方式读取文本
	 * @throws FileNotFoundException
	 */
	@Test
	public void readWenBen() throws FileNotFoundException{
		
		Scanner scanner = new Scanner(new FileInputStream(new File("e://test.txt")), "utf-8");
		while(scanner.hasNext())
			System.out.println(scanner.nextLine());
		
	}
	
	
	/**
	 * 以字节的方式写入文本
	 * @throws FileNotFoundException
	 */
	@Test
	public void writeByte() throws FileNotFoundException{
		
		OutputStream outputStream = new FileOutputStream(new File("e://test.txt"));
		String str = "I LOVE YOU EVE ";
		char[] ch = str.toCharArray();
//		char[] ch = {'a','b','c','d'};
		for (char c : ch) {
			try {
				outputStream.write(c);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		try {
			outputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 以字节的方式读取文本
	 */
	@Test
	public void readByte(){
		
		try {
			InputStream inputStream = new BufferedInputStream(new FileInputStream("e://test.txt"));
			int i=0;
			StringBuilder builder = new StringBuilder();
			while((i=inputStream.read())!=-1){
				
				
				builder.append((char)i);
			}
			System.out.println(builder.toString());
			inputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

java NIO从一个文件写到另一个文件

    /**
     *通道之间的数据传输
     * transferFrom()方法将数据源从通道传输到FileChannel中
     * @throws IOException
     */
    @Test
    public void transferFrom() throws IOException{
        
        RandomAccessFile fromFile = new RandomAccessFile("e://1.txt", "rw");
        FileChannel fromChannel = fromFile.getChannel();
        
        RandomAccessFile toFile = new RandomAccessFile("e://2.txt", "rw");
        FileChannel toChannel = toFile.getChannel();
        
        long position = 0;
        long count = fromChannel.size();
        
        toChannel.transferFrom(fromChannel, position, count);
    }
    
    /**
     * transferTo()方法将数据从FileChannel传输到其他的channel中
     * @throws IOException
     */
    @Test
    public void transferTo() throws IOException{
        
        RandomAccessFile fromFile = new RandomAccessFile("e://1.txt", "rw");
        FileChannel fromChannel = fromFile.getChannel();
        
        RandomAccessFile toFile = new RandomAccessFile("e://2.txt", "rw");
        FileChannel toChannel = toFile.getChannel();
        
        long position=0;
        long count = fromChannel.size();
        
        fromChannel.transferTo(position, count, toChannel);
    }
    

Java NIO读取文件(可能中文输出乱码)

/**
     * FileChannel无法设置为非阻塞模式,总是运行在阻塞模式下
     * @throws IOException 
     */
    @Test
    public void testReadFromChannel() throws IOException{
        
        Charset charset = Charset.forName("utf-8");
        
        RandomAccessFile file = new RandomAccessFile(new File("e://2.txt"), "rw");
        FileChannel channel = file.getChannel();
        
        ByteBuffer buf = ByteBuffer.allocate(40000);
        int byteRead = channel.read(buf);
        
        StringBuilder sb = new StringBuilder();
        
        while(byteRead!=-1){
            
            buf.flip();
            while(buf.hasRemaining()){
                sb.append((char)buf.get());
            }
            buf.clear();
            byteRead = channel.read(buf);
        }
        
        System.out.println(sb.toString());
        
        
    }

Java NIO写数据到文件

/**
     * 向FileChannel中写数据
     * @throws IOException 
     */
    @Test
    public void testWriteToChannel() throws IOException{
        
        @SuppressWarnings("resource")
        RandomAccessFile file = new RandomAccessFile("e://2.txt", "rw");
        FileChannel channel = file.getChannel();
        String newData = "New String to write to 我是阿凡达 ..... "+System.currentTimeMillis();
        ByteBuffer buf = ByteBuffer.allocate(1024);
        buf.clear();
        
        buf.put(newData.getBytes());
        buf.flip();
        
        while(buf.hasRemaining()){
            channel.write(buf);
        }
        
        channel.close();
    }

 

 

 

© 著作权归作者所有

共有 人打赏支持
1527
粉丝 7
博文 104
码字总数 42945
作品 0
成都
程序员
私信 提问
初学Python——文件操作第二篇

前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求。下面来一一分析。 一、Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操...

学霸初养成
04/19
0
0
NIO、Netty(NIO基础)

1、阻塞与非阻塞 阻塞与非阻塞是描述进程在访问某个资源时,数据是否准备就绪的的一种处理方式。当数据没有准备就绪时: 阻塞:线程持续等待资源中数据准备完成,直到返回响应结果。 非阻塞:...

这很耳东先生
12/06
0
0
理解Java中字符流与字节流的区别

什么是流 字节流 public abstract int read() throws IOException; public int read(byte b[]) throws IOException { } public int read(byte b[], int off, int len) throws IOException {......

清尘V
2016/04/21
105
0
Java中常用的字节流和字符流

IO流(输入流、输出流) 字节流、字符流   1.字节流: InputStream、OutputStream InputStream抽象了应用程序读取数据的方式; OutputStream抽象了应用程序写出数据的方式;    2.EOF=En...

MrDong先生
08/22
0
0
Java IO流(二)

IO流常用基类 字节流的抽象基类: 字符流的抽象基类: 注意:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀的。例如,InputStream的子类——FileInputStream,Reader的子类—...

yerenyuan_pku
2017/10/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
32分钟前
1
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
44分钟前
2
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
46分钟前
3
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
今天
8
0

中国龙-扬科
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部