文档章节

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

1527
 1527
发布于 2016/05/08 00:34
字数 518
阅读 472
收藏 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

1527

粉丝 9
博文 121
码字总数 51620
作品 0
成都
程序员
私信 提问
加载中

评论(0)

一文看懂java io系统 (转)

出处: 一文看懂java io系统 学习java IO系统,重点是学会IO模型,了解了各种IO模型之后就可以更好的理解java IO Java IO 是一套Java用来读写数据(输入和输出)的API。大部分程序都要处理一...

osc_tjdfnjyo
2019/12/21
14
0
C# 对文本文件的几种读写方法总结

  计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的字符(比如汉字)以及一些特殊字符(比如€),就引入了Unicode字符集。基于Unicode字符集的编码方式有很多,比如UTF-7、UTF...

osc_cldb1bbf
2019/04/03
2
0
《精通并发与Netty》学习笔记(09 - Java中流的概念)

Java中流的概念 java程序通过流来完成输入/输出。流是生产或消费信息的抽象。流通过java的输入/输出与物理设备链接。尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式。这样,...

osc_8k1i36qg
2019/05/21
4
0
NIO、Netty(NIO基础)

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

这很耳东先生
2018/12/06
679
0
文件操作 之 踩坑feof()函数和ftell()函数——C语言

踩坑一:feof函数 函数原型:int feof( FILE *stream ); 函数功能:如果读取操作尝试读取超过文件末尾的位置,feof函数返回非0,否则返回0(函数 feof 只用于检测流文件) 微软官方文档中关于...

osc_9gmn690o
2019/04/03
2
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在Windows上安装pip? - How to install pip on Windows?

问题: pip is a replacement for easy_install . pip替代了easy_install 。 But should I install pip using easy_install on Windows? 但是我应该在Windows上使用easy_install安装pip吗? ......

fyin1314
今天
21
0
gitlit二级目录访问

由于我们只有一个域名暴露,特殊需求,所以需要二级目录访问 配置文件在 defaults.properties 第1985行 contextPath 改掉就好了 # Context path for the GO application. You might want to...

shzwork
今天
24
0
OSChina 周一乱弹 —— 我电脑传染了新冠脚气

@性感码农 :不结婚,被老爸说,回村里别人都瞧不起你,及即使你赚了很多钱,不结婚,永远没有人瞧得起你。挺纳闷的,要别人瞧得起我干嘛 又不回村里, 跟他们生活也没什么交集啊, 用得着他...

小小编辑
今天
18
0
类加载的过程

加载->链接->初始化; 其中链接又分为:验证->准备->解析。

曦鱼violet
今天
21
0
Linux下几个与磁盘空间和文件尺寸相关的命令

硬盘是计算机非常重要的一个部件,不管是代码,还是 UI 、声音、文档,抑或是没人时偷偷看的小视频,都需要保存在硬盘里。 对于很多 Linux 服务器,会进行很多的编译操作。而编译操作在很多情...

Linux就该这么学
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部