字符流复制文本

txt自动保存为ANSI码我用的是UTF-8,所以更改否则乱码
txt自动保存为ANSI码我用的是UTF-8,所以更改否则乱码
复制d盘下work目录下30目录下Buffer.txt文件(包括文件内容)

package com.sy.InputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
public class Demo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		founc01();
		founc02();
		founc03();
		founc04();
		founc05();
	}
	//高速缓冲 字符编写
	public static void founc01() throws IOException{
		BufferedReader bufferedReader=new BufferedReader(new FileReader("D:\\work\\30\\Buffer.txt"));
		BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("D:\\work\\30\\Buffer1.txt"));
		int len;
		while((len=bufferedReader.read())!=-1){
			bufferedWriter.write(len);
		}
		bufferedReader.close();
		bufferedWriter.close();
	}
	//高速缓冲 字符串编写
	public static void founc02() throws IOException{
		BufferedReader bufferedReader=new BufferedReader(new FileReader("D:\\work\\30\\Buffer.txt"));
		BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("D:\\work\\30\\Buffer2.txt"));
		String line=null;
		while((line=bufferedReader.readLine())!=null){//.readLine()读取一个文本行
			bufferedWriter.write(line);
			bufferedWriter.newLine();//换行
		}
		bufferedReader.close();
		bufferedWriter.close();
	}
	//高速缓冲 字符数组编写
	public static void founc03() throws IOException{
		BufferedReader bufferedReader=new BufferedReader(new FileReader("D:\\work\\30\\Buffer.txt"));
		BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("D:\\work\\30\\Buffer3.txt"));
		int len;
		char[] cs=new char[1024];
		while((len=bufferedReader.read(cs))!=-1){
			bufferedWriter.write(cs,0,len);//写入字符数组某部分,0是索引,len是长度。不写如果字符数组内容没有1024个会制造一些空格填充从而文件大小改变
		}
		bufferedReader.close();
		bufferedWriter.close();
	}
	//普通 字符编写
	public static void founc04() throws IOException{
		FileReader fileReader=new FileReader("D:\\work\\30\\Buffer.txt");
		FileWriter fileWriter=new FileWriter("D:\\work\\30\\Buffer4.txt");
		int len;
		while((len=fileReader.read())!=-1){
			fileWriter.write(len);
		}
		fileReader.close();
		fileWriter.close();
	}
	//普通 字符数组编写
	public static void founc05() throws IOException{
		FileReader fileReader=new FileReader("D:\\work\\30\\Buffer.txt");
		FileWriter fileWriter=new FileWriter("D:\\work\\30\\Buffer5.txt");
		int len;
		char[] cs=new char[1024];
		while((len=fileReader.read(cs))!=-1){
			fileWriter.write(cs, 0, len);
		}
		fileReader.close();
		fileWriter.close();
	}
}

转换流(将字节转字符)
写入和读出

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class TransitionDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
	    func01();
		func02(func01());//传入编码
	}
	public static String func01() throws IOException{
		File file=new File("D:\\work\\10\\20\\java.txt");
		FileOutputStream in=new FileOutputStream(file);
		OutputStreamWriter ir=new OutputStreamWriter(in, "utf-8");//以utf-8编码写入
		String ed= ir.getEncoding();//获取写入编码utf-8
		BufferedWriter bw=new BufferedWriter(ir);
		bw.write("你好我是好人");
		bw.write("\r\n");//换行
		bw.write("我叫依梦");
		bw.close();
		ir.close();
		in.close();
		return ed;	
	}
	
	public static void func02(String ed) throws IOException{
		File file=new File("D:\\work\\10\\20\\java.txt");
		FileInputStream in=new FileInputStream(file);
		InputStreamReader ir=new InputStreamReader(in, ed);//以utf-8读出
		BufferedReader br=new BufferedReader(ir);
		String str=br.readLine();
		String str1= br.readLine();
		System.out.println(str);
		System.out.println(str1);
		br.close();
		ir.close();
		in.close();
	}

}

写入对象和读出对象
定义一个Person类

import java.io.Serializable;

public class Person implements Serializable{//Serializable序列化接口
	private String name;
	private transient Double slo;//transient不被序列化
	private int age;
	public Person(String name, double slo, int age) {
		super();
		this.name = name;
		this.slo = slo;
		this.age = age;
	}
	public Person() {
		super();
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", slo=" + slo + ", age=" + age + "]";
	}
	
	
}

利用将序列化的对象类流写盘在读出

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.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class ObjDemo {
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		func01();
		func02();
	}
	//序列化person
	public static void func01() throws IOException{
		File file=new File("D:\\work\\10\\20\\oos.txt");
		OutputStream os=new FileOutputStream(file);
		ObjectOutputStream oos=new ObjectOutputStream(os);
		Person p1=new Person("小明", 5000, 20);
		Person p2=new Person("小红",4999,44);
		//list集合
		List<Person> list=new ArrayList<>();
		list.add(p1);
		list.add(p2);
		oos.writeObject(list);
		//关闭流
		oos.close();
		os.close();
	}
	//反序列化person
	public static void func02() throws IOException, ClassNotFoundException{
		File file=new File("D:\\work\\10\\20\\oos.txt");
		InputStream is=new FileInputStream(file);
		ObjectInputStream ois=new ObjectInputStream(is);
		Object oj=ois.readObject();
		List<Person> list=(List<Person>) oj;
		for(Person st:list){
			System.out.println(st);
		}
		//关闭流
		ois.close();
		is.close();
	}
}

Properties(键值对读写)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class PropertiesDemo {

	public static void main(String[] args) throws IOException {
		func01();
		func02();
		func03();
	}
	//在properties文件中写入
	public static void func01() throws IOException{
		File file=new File("D:\\work\\20\\hello.java\\pp.properties");
		OutputStream fos=new FileOutputStream(file);
		Properties properties=new Properties();
		properties.setProperty("小红", "18岁");//造数据
		properties.setProperty("小明", "20岁");//造数据
		String str=properties.getProperty("小明");
		System.out.println(str);//测试数据
		properties.store(fos, "abc");//写入properties文件中并给abc注释 默认会加入时间
		fos.close();
	}
	
	public static void func02() throws IOException{
		File file=new File("D:\\work\\20\\hello.java\\pp.properties");
		InputStream is=new FileInputStream(file);
		Properties properties=new Properties();
		properties.load(is);//加载properties文件
		Set<String> st=properties.stringPropertyNames();// 返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。
		Iterator<String> it=st.iterator();//set集合的迭代器遍历
		while(it.hasNext()){
			String str= it.next();
			System.out.println(str+"="+properties.getProperty(str));
		}
		is.close();
	}
	
	public static void func03() throws IOException{
		File file=new File("D:\\work\\20\\hello.java\\pp.properties");
		InputStream is=new FileInputStream(file);
		Properties properties=new Properties();
		properties.load(is);
		Set<String> st=properties.stringPropertyNames();
		for(String s:st){//set集合的增强for循环遍历
			System.out.println(s+"="+properties.getProperty(s));
		}
		is.close();
	}
}

### 回答1: 使用字节流复制文本文件: ```java import java.io.*; public class ByteStreamCopy { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("source.txt"); FileOutputStream fos = new FileOutputStream("target.txt"); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); } fis.close(); fos.close(); System.out.println("文件复制成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 使用字符流复制文本文件: ```java import java.io.*; public class CharStreamCopy { public static void main(String[] args) { try { FileReader fr = new FileReader("source.txt"); FileWriter fw = new FileWriter("target.txt"); char[] buffer = new char[1024]; int len; while ((len = fr.read(buffer)) != -1) { fw.write(buffer, 0, len); } fr.close(); fw.close(); System.out.println("文件复制成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` ### 回答2: 编写一个程序来复制文本文件需要考虑许多因素,如何打开文件、读写文件、关闭文件等等。在 Java 中,有两种流可以用来读写文本文件,分别是字节流和字符流。下面将分别介绍如何使用这两种流来复制一个文本文件。 使用字节流复制文本文件 字节流用于读写二进制文件,读取时返回的是字节,写入时也只能写字节。但是,我们可以将字节转换为字符串,然后对其进行进一步处理。以下是使用字节流复制文本文件的详细步骤: 1.创建一个 FileInputStream 对象,并用它打开待复制的文件。 2.创建一个 FileOutputStream 对象,并用它打开输出文件。 3.创建一个 byte 数组,用于存储读入的字节。 4.使用 FileInputStream 的 read() 方法从输入文件中读取字节,然后把它们写入到输出文件中。 5.重复步骤 4,直到文件结束。 6.关闭两个流。 下面是字节流复制文本文件的示例代码: try (FileInputStream inputStream = new FileInputStream("input.txt"); FileOutputStream outputStream = new FileOutputStream("output.txt");) { byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } } catch (Exception e) { e.printStackTrace(); } 使用字符流复制文本文件 字符流用于读写文本文件,读取时返回的是字符,写入时也只能写字符。相比之下,字符流更适合处理文本文件。以下是使用字符流复制文本文件的详细步骤: 1.创建一个 FileReader 对象,并用它打开待复制的文件。 2.创建一个 FileWriter 对象,并用它打开输出文件。 3.创建一个 char 数组,用于存储读入的字符。 4.使用 FileReader 的 read() 方法从输入文件中读取字符,然后把它们写入到输出文件中。 5.重复步骤 4,直到文件结束。 6.关闭两个流。 下面是字符流复制文本文件的示例代码: try (FileReader reader = new FileReader("input.txt"); FileWriter writer = new FileWriter("output.txt");) { char[] buffer = new char[1024]; int length; while ((length = reader.read(buffer)) > 0) { writer.write(buffer, 0, length); } } catch (Exception e) { e.printStackTrace(); } 无论是使用字节流还是字符流复制文本文件,都需要注意关闭流的操作。只有在保证流已经被关闭之后,我们才能确保文件的操作已经完成。 ### 回答3: 在Java中,我们可以通过字节流和字符流来实现文件的复制。字节流以字节为单位进行文件操作,而字符流以Unicode字符为单位进行文件操作。下面我们将分别使用字节流和字符流来实现文件的复制使用字节流复制文本文件: 1. 创建一个FileInputStream对象和一个FileOutputStream对象,分别用于读取源文件和写入目标文件的数据。 2. 使用byte数组来缓存读取源文件的字节数据,每次读取一段数据,然后将其写入目标文件中。 3. 复制完成后,要记得关闭输入流和输出流。 以下是实现代码: public static void copyFileByByte(String source, String target) throws IOException { FileInputStream inputStream = null; FileOutputStream outputStream = null; try { inputStream = new FileInputStream(source); outputStream = new FileOutputStream(target); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } } 使用字符流复制文本文件: 1. 创建一个FileReader对象和一个FileWriter对象,分别用于读取源文件和写入目标文件的数据。 2. 使用char数组来缓存读取源文件的字符数据,每次读取一段数据,然后将其写入目标文件中。 3. 复制完成后,要记得关闭输入流和输出流。 以下是实现代码: public static void copyFileByChar(String source, String target) throws IOException { FileReader reader = null; FileWriter writer = null; try { reader = new FileReader(source); writer = new FileWriter(target); char[] buffer = new char[1024]; int length; while ((length = reader.read(buffer)) > 0) { writer.write(buffer, 0, length); } } finally { if (reader != null) { reader.close(); } if (writer != null) { writer.close(); } } } 以上便是使用字节流和字符流分别实现文件复制的过程,两种方法均可以实现对文本文件的复制操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值