java管道流文件的复制_JavaIO 总结笔记三 基本字节字符输入输出流和文件复制...

一、IO体系

1.流主要分两大类:字节流 字符流

2.在硬盘上的文件,都是以二进制字节形式存储的,所以不管啥文件,读写时都应该用字节流

3.在java的早期版本中,的确只有字节流,没有字符流

4.一个数字或字母占1个字节,一个汉字占了2个字节,而字节流一次读写1个字节,很容易产生中文乱码问题

5.字符流专门用来读写文本类的文件,txt doc

6.字节流适合用来读写非文本类的文件,mp3 mp4 avi rm rmvb mkv jpg png bmp

二、常用类(管道类)

1.字节流 FileInputStream FileOutputStream

2.字符流 FileReader FileWriter

三、字节流的输出流 FileOutputStream

1.作用 把内存中的数据输出到(写到)硬盘的某个文件中

2.构造方法

FileOutputStream(File file) 不存在会自动键

FileOutputStream(String name) 不存在会自动键

3.功能方法

public void write(int b) 参数是ASCII表中的码值,不是普通数字

public void write(byte[] b) String对象的getBytes方法有编码转换功能

public void write(byte[] b, int off, int len)

4.使用字节流怎么输出一个换行?可以使用System.getProperty("line.separator")来获得当前系统的换行符。

5.如何追加和覆盖? 默认就是覆盖

代码举例:

public static void writeFile() throws IOException {

//演示FileOutputStream类

//1.建管道

FileOutputStream fos1 = new FileOutputStream(new File("A03_FileOutputStreamTest.txt"));

//FileOutputStream fos2=new FileOutputStream("A03_FileOutputStreamTest.txt");

//2.写数据

fos1.write(97);

fos1.write(98);

fos1.write(99);

fos1.write(100);

byte[] t = {97, 98, 'c'};

fos1.write(t);

fos1.write("hello".getBytes());

fos1.write("world".getBytes());

fos1.write("\r\n".getBytes());

fos1.write(t, 0, 2);

fos1.close();

}

四、字节流的输入流 FileInputStream类

1.作用 把硬盘中的数据输入(读取)到内存中

2.构造方法

FileInputStream(File file)

FileInputStream(String name)

3.功能方法

public int read() 一次读取一个字节并返回,如果到文件最后了,返回-1

public int read(byte[] b) 一次读取一个数组长度的数据 ,返回的是读取到的数据的长度 ,读不到数据就返回-1

new String(byte[] b)

代码举例:

public static void readFile() throws IOException {

//1.建管道

File f = new File("src\\com\\afinalstone\\file\\IOUtil.java");

InputStream fis = new FileInputStream(f);

//FileInputStream fis=new FileInputStream("src\com\afinalstone\file\IOUtil.java");

//2.读取数据

// public int read() 一次读取一个字节并返回,如果到文件最后了,返回-1

int res;

do {

res = fis.read();

System.out.println((char) res);

} while (res != -1);

//3.关闭

fis.close();

}

public static void readFileByBufferByte() throws IOException {

//1.建管道

File f = new File("src\\com\\afinalstone\\file\\IOUtil.java");

InputStream fis = new FileInputStream(f);

//FileInputStream fis=new FileInputStream("c:\\test\\hello.txt");

// public int read(byte[] b) 一次读取一个数组长度的数据 ,返回的是读取到的数据的长度

//2.来个缓存区读取数据

System.out.println(f.length());

byte[] t = new byte[(int) f.length()];

//3.装车

fis.read(t);

System.out.println(new String(t).trim());

//4.关闭

fis.close();

}

五、复制文件

1.复制 先读取目标文件的数据,然后再把数据写入到另一个文件中

2.复制的方式

a.对于较小文件 一次性读,然后一次性写

b.对于较大文件 边读边写 读一点,写一点,缓存的使用

代码举例:

public static void copy01_FileIOStream() throws IOException {

//a.对于较小文件 一次性读,然后一次性写

//1.建管道

File f = new File(fileName_source);

FileInputStream fis = new FileInputStream(f);

//2.来辆车

byte[] t = new byte[(int) f.length()];

//3.装车

fis.read(t);

//4.关闭

fis.close();

//1.建管道

FileOutputStream fos = new FileOutputStream(fileName_destination);

//2.写数据

fos.write(t);

//3.关闭

fos.close();

}

public static void copy01_FileIOStreamBufferByte() throws IOException {

//b.对于较大文件 边读边写 读一点,写一点

//1.建两个管道

FileInputStream fis=new FileInputStream(fileName_source);

FileOutputStream fos=new FileOutputStream(fileName_destination);

//2.来辆车

// byte[] t=new byte[1*1024*1024]; //1M

byte[] t=new byte[8*1024]; //8k

//3.装车卸车 读1M写1M

while(true)

{

int res=fis.read(t); //读

if(res==-1)

break;

fos.write(t,0,res); //写(最后一趟车可能装不满)

}

//4.关闭

fis.close();

fos.close();

}

六、字符流的输出流FileWriter类

1.作用 把内存中的数据输出(写)到硬盘的某个文件中 只适合文本类的文件

2.构造方法

public FileWriter(File file)

public FileWriter(String fileName)

public FileWriter(File file,boolean append)

public FileWriter(String fileName,boolean append)

3.功能方法

public void write(String str)

public void write(char[] cbuf)

public void write(char[] b,int off, int len)

代码举例:

public static void writeFile() throws IOException {

//演示FileWriter类

//1.建管道

FileWriter fw=new FileWriter(new File("F03_FileReaderAndWriter.txt"));

//FileWriter fw=new FileWriter("c:\\test\\hello.txt");

//2.写数据

fw.write("hello\r\n");

char[] c={'a','b','c',100};

fw.write(c);

fw.write("\r\n");

fw.write(c, 0, 2);

//3.关闭

fw.close();

}

七、字符流的输入流FileReader类

1.作用 把硬盘中某个文件的数据输入(读取)到内存中

2.构造方法

public FileReader(File file)

public FileReader(String fileName)

3.功能方法

public int read() 一次读一个字符 读到数据返回的就是ASCII码,读不到就返回-1

public int read(char[] cbuf) 读到数据返回的就是数据的长度,读不到就返回-1

代码举例:

public static void readFile() throws IOException {

//演示FileReader类

//1.建管道

File f=new File("fileName");

FileReader fr=new FileReader(f);

//FileReader fr=new FileReader("src\com\afinalstone\file\F03_FileReaderAndWriter.java");

//2.读数据

int res;

do {

res=fr.read();

System.out.println((char)res);

} while (res!=-1);

//3.关闭

fr.close();

}

public static void readFileByBufferChar() throws IOException {

//演示FileReader类

//1.建管道

File f=new File(fileName);

FileReader fr=new FileReader(f);

//FileReader fr=new FileReader("c:\\test\\hello.txt");

//2.来辆车

System.out.println(f.length());

char[] c=new char[(int)f.length()];

//3.装车

fr.read(c);

System.out.println(new String(c).trim());

//4.关闭

fr.close();

}

八、字符流的缓冲区

1.字符流有缓冲区,字节流是没有缓冲区的

2.缓冲区:它是内存中的一块区域

3.作用:提高效率 减少对硬盘的频繁读写 保护硬盘

4.字符流缓冲区的默认大小是8K

5.当关闭管道时,会强制把缓冲区中的数据全部写到硬盘中

6.public void flush() //清缓冲区,强制写入

九、用字符流实现文件复制

复制的方式

a.对于较小文件 一次性读,然后一次性写

b.对于较大文件 边读边写 读一点,写一点

public static void copy02_FileReaderWriter() throws IOException {

//1.建两个管道

FileReader fr=new FileReader(fileName_source);

FileWriter fw=new FileWriter(fileName_destination);

//3.装车卸车 边读边写

while(true)

{

int res=fr.read();

if(res==-1)

break;

fw.write(res);

}

//4.关闭

fr.close();

fw.close();

}

public static void copy02_FileReaderWriterBufferChar() throws IOException {

//演示用字符流实现较大文件的复制 边读边写

//1.建两个管道

FileReader fr=new FileReader(fileName_source);

FileWriter fw=new FileWriter(fileName_destination);

//2.来辆车

char[] c=new char[1*1024]; //1K

//3.装车卸车 边读边写

while(true)

{

int res=fr.read(c);

if(res==-1)

break;

fw.write(c,0,res);

}

//4.关闭

fr.close();

fw.close();

}

项目地址:传送门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql+phpmyadmin配置流程

mysqlphpmyadmin配置流程:环境:Apachephp5mysql5下载包:phpMyAdmin-2.11.9.4-all-languages-utf-8-only.tar.gz不能下就到这里下载 [url]http://www.phpmyadmin.net/home_page/downloads.php[/url]一:安装配置1> 安装包&#x…

hadoop入门小知识点

注意各个主机之间的通信 文件的复制 scp指令 scp /etc/profile acm03:/etc 所有历史版本: archive.apache.org hdfs://acm01:9000 hdfs是个协议 然后 访问谁 哪个端口 统一资源定位符URL 客户端统统 找nameinode 访问它 启动 datanode hadoop-dae…

java关键字整理_【java基础知识整理】java基础语法之关键字

一、continue与breakcontinue与break基本都使用与循环中,但是continue指结束所有循环的当前循环,而break是指结束整个循环。下面用代码进行简单实例。使用continue结束当前循环this:this关键字只能在方法内部使用,表示对“调用方法…

快速查询DB Lock的方法

DBCC Opentran DBCC inputBuffer(id) KILL (id) sp_lock --找出產生Lock的源頭--Find locked processselect open_tran,* from sys.sysprocesses where blocked>0 --Find suspected processselect * from sys.sysprocesses where statussleeping and waittype0x0000 and ope…

form表单多文件上传

1.html/jsp主页 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"…

python3.7.1使用_使用python3和pytorch1.7.1运行dface

0 准备工作运行环境&#xff1a;Alienware GTX1070Ubuntu 18.04cuda 10.1创建虚拟环境&#xff1a;conda create -n py37_dface python3.7conda activate py37_dfacepip install torch1.7.1cu101 torchvision0.8.2cu101 torchaudio0.7.2 -f https://download.pytorch.org/whl/t…

新书预告

新书预告依2009年版考试大纲 重编的《网络工程师考试考前冲刺预测卷及考点解析&#xff08;第2版&#xff0c;含2008年下半年试题解析&#xff09;》、《软件设计师考试考前冲刺预测卷及考点解析&#xff08;第2版&#xff09;》&#xff0c;试题更新率可达80%以上&#xff0c;…

JS学习记录(BOM部分)

BOOM部分 Screen <html lang"en"> <head><meta charset"UTF-8"><title>Screen</title> </head> <body></body> <script>console.log(screen.width);console.log(screen.height);console.log(screen…

Java中JFrame怎样控制闪烁_在JFrame Java中闪烁

大家好,我正在做一个线程来更新JFrame上的球,所以我重新绘制屏幕…然后将球更新到它的位置……然后再次绘制屏幕……画出球和同样的周期……这是代码private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {Thread t new Thread(){public void run(){while(t…

基于Linux的虚拟主机搭建

为了建设二级网站建设&#xff0c;我考察了多个开源和商业的虚拟主机和控制面板。主要察看了Linux下的。很多工具&#xff0c;例如开源的VHCS&#xff0c;商业的Plesk功能虽然十分强大&#xff0c;但他们的主要服务对象是商业虚拟主机客户&#xff0c;和我们的集中管理模式不太…

在linux上安装jdk(转载)

软件环境&#xff1a; 虚拟机&#xff1a;VMware Workstation 10 操作系统&#xff1a;Ubuntu-12.04-desktop-amd64 JAVA版本&#xff1a;jdk-7u55-linux-x64 软件下载地址&#xff1a; JDK&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html &a…

cryptico.js java解密_從Cryptico.js中提取RSA私鑰

我相信這是一個非常基本的問題&#xff0c;但我開始使用JavaScript和RSA進行研究&#xff0c;所以我有點失落。我剛剛下載了Cryptico庫&#xff0c;它爲我提供了一個易於使用的RSA密鑰生成/加密/解密。從Cryptico.js中提取RSA私鑰publicKeyString(RsaKey)哪個&#xff1a;my.pu…

WebService大讲堂之Axis2(1):用POJO实现0配置的WebService

Axis2是一套崭新的WebService引擎&#xff0c;该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2&#xff0c;还集成了非常流行的REST WebService&#xff0c;同时还支持Spring、JSON等技术。这些都将在后面的系列教程中讲解。在本文中主要介绍了如何使用Axis2开…

Unity中UGUI之Canvas属性解读版本二

Canvas Render Modes(渲染模式) 1.在screen空间中渲染2.在world空间中渲染 Screen Space-Overlay 在这个渲染模式中&#xff0c;UI元素将在场景的上面。如果场景改变大小或改变分辨率&#xff0c;Canvas将自动改变大小去适配。 Screen Space-Camera 这和Screen Space-Overlay类…

docker 搭建nginx php mysql_Docker搭建PHP/Nginx/MySQL/Composer环境

一、安装PHP&#xff1a;#PHP镜像docker pull php:7.2-fpm#PHP容器&#xff0c;监听9000端口&#xff0c;映射主机项目目录/data/wwwdocker run --name php -d -p 9000:9000 -v /data/www:/www php:7.2-fpm二、安装Nginxdocker pull nginxdocker run --name php-nginx -d -p 80…

红帽企业linux4参考指南读书笔记-GRUB引导器

一个引导加载器通常存在于系统的主硬盘驱动器中&#xff0c;通过它来加载linux内核跟一些需要的文件或其它操作系统到系统内存中。在各种系统架构上运行RedHat企业Linux系统会使用不同的引导加载器&#xff0c;一般在X86系统架构和AMD、AMD64系统架构中使用GRUB引导器&#xff…