首页 > 代码库 > java之IO整理(上)

java之IO整理(上)

 

/*//创建一个新文件
	public static void main(String[] args) {
		File file=new File("D:\\hello.txt");
		try {
			file.createNewFile();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}*/
	
	/*//File类的两个常量  
	public static void main(String[] args) {
		System.out.println(File.separator);//结果: 		System.out.println(File.pathSeparator);//结果: :
	}*/
	
	/*//删除一个文件
	public static void main(String[] args) {
		String fileName="D:"+File.separator+"hello.txt";
		File file=new File(fileName);
		if(file.exists()){
			file.delete();
		}else {
			System.out.println("文件不存在!");
		}
	}*/
	
	/*//创建一个文件夹
	public static void main(String[] args) {
		String fileName="D:"+File.separator+"hello";
		File file=new File(fileName);
		file.mkdirs();
	}*/
	
	/*//使用listFiles列出指定目录的全部文件
	 //* listFiles输出的是完整路径
	public static void main(String[] args) {
		String fileName="D:"+File.separator;
		File file=new File(fileName);
		File[] str=file.listFiles();
		for(int i=0;i<str.length;i++){
			System.out.println(str[i]);
		}
	}*/
	
	/*使用isDirectory判断一个指定的路径是否为目录*/
	/*public static void main(String[] args) {
		String fileName="D:"+File.separator;
		File file=new File(fileName);
		if(file.isDirectory())
			System.out.println("yes");
		else {
			System.out.println("no");
		}
	}*/
	
	/*列出指定目录的全部内容*/
	/*public static void main(String[] args) {
		String fileName="D:"+File.separator;
		File file=new File(fileName);
		print(file);
	}
	public static void print(File f){
		if(f!=null){
			if(f.isDirectory()){
				File[] fileArray=f.listFiles();
				if(fileArray!=null){
					for(int i=0;i<fileArray.length;i++){
						print(fileArray[i]);//递归调用
					}
				}
			}else {
				System.out.println(f);
			}
		}
	}*/
	
	/*使用RandomAccessFile写入文件
	public static void main(String[] args) throws IOException {
		String fileName="D:"+File.separator+"hello.txt";
		File file=new File(fileName);
		RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw");
		randomAccessFile.writeBytes("1234567890");
		randomAccessFile.writeInt(42);
		randomAccessFile.writeBoolean(true);
		randomAccessFile.writeChar(88);
		randomAccessFile.writeDouble(12.678);
		randomAccessFile.writeFloat(23.5f);
		randomAccessFile.close();		
	}//如果你此时打开hello。txt查看的话,会发现那是乱码。
*/	
	/*字节流
	 * 向文件中写入字符串
	public static void main(String[] args) throws IOException {
		String fileName="D:"+File.separator+"hello.txt";
		File file=new File(fileName);
		OutputStream outputStream=new FileOutputStream(file);
		String string="Hello";
		byte[] bs=string.getBytes();
		outputStream.write(bs);
		outputStream.close();
	}*/
	
	/**
	 * 字节流
	 * 向文件中一个字节一个字节的写入字符串
	 * @throws IOException 
	 * *//*
	public static void main(String[] args) throws IOException {
		String fileName="D:"+File.separator+"hello.txt";
		File file=new File(fileName);
		OutputStream outputStream=new FileOutputStream(file);
		String string="Hello GG";
		byte[] bs=string.getBytes();
		for(int i=0;i<bs.length;i++){
			outputStream.write(bs[i]);
		}		
		outputStream.close();
	}*/
	
	/**
	 * 字节流
	 * 向文件中追加新内容:
	 * @throws IOException 
	 * */
	/*public static void main(String[] args) throws IOException {
		String fileName="D:"+File.separator+"hello.txt";
		File file=new File(fileName);
		OutputStream outputStream=new FileOutputStream(file,true);
		String string="Hello MM";
		//String str="\r\nRollen"; 可以换行		
		byte[] bs=string.getBytes();
		for(int i=0;i<bs.length;i++){
			outputStream.write(bs[i]);
		}		
		outputStream.close();
	}*/
	
	/**
	 * 字节流
	 * 读文件内容
	 * @throws IOException 
	 * */
	/*public static void main(String[] args) throws IOException {
		String fileName="D:"+File.separator+"hello.txt";
		File file=new File(fileName);
		InputStream inputStream=new FileInputStream(file);
		//byte[] bs=new byte[1024];//预先申请了一个指定大小的空间
		byte[] bs=new byte[(int) file.length()];
		inputStream.read(bs);
		System.out.println("文件长度为:"+file.length());
		inputStream.close();
		System.out.println(new String(bs));
	}*/
	
	/**
	 * 字节流
	 *读文件
	 * @throws IOException 
	 * */
	/*public static void main(String[] args) throws IOException {
		String fileName="D:"+File.separator+"hello.txt";
		File file=new File(fileName);
		InputStream inputStream=new FileInputStream(file);
		byte[] bs=new byte[1024];
		int count=0;
		int temp=0;
		while((temp=inputStream.read())!=(-1)){//当读到文件末尾的时候会返回-1.正常情况下是不会返回-1的
			bs[count++]=(byte) temp;
		}
		inputStream.close();
		System.out.println(new String(bs));
	}*/
	
	/**
	 * 字符流
	 * 写入数据
	 * @throws IOException 
	 * */
	/*public static void main(String[] args) throws IOException {
		String fileName="D:"+File.separator+"hello.txt";
		File file=new File(fileName);
		Writer out=new FileWriter(file);
		String string="朋友";
		out.write(string);
		out.close();		
	}*/
	
	/**
	 * 字符流
	 * 从文件中读出内容
	 * @throws IOException 
	 *采用循环读取的方式,因为我们有时候不知道文件到底有多大。
	 * */
	/*public static void main(String[] args) throws IOException {
		String fileName="D:"+File.separator+"hello.txt";
		File file=new File(fileName);
		char[] ch=new char[100];
		Reader reader=new FileReader(file);
		int temp=0;
		int count=0;
		while((temp=reader.read())!=(-1)){
			ch[count++]=(char) temp;			
		}
		reader.close();
		System.out.println(new String(ch, 0, count));
	}*/

/**
* 将字节输出流转化为字符输出流
* @throws IOException
* */
/*public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
Writer out=new OutputStreamWriter(new FileOutputStream(file));
out.write("MM");
out.close();
}*/

/**
* 将字节输入流变为字符输入流
* @throws IOException
* */
/*public static void main(String[] args) throws IOException {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
Reader reader=new InputStreamReader(new FileInputStream(file));
char[] cs=new char[100];
int len=reader.read(cs);
System.out.println(new String(cs, 0, len));
reader.close();
}*/

/**
* 使用内容操作流将一个大写字母转化为小写字母
* @throws IOException
* 内容操作流一般用来生成一些临时信息的,这样可以避免删除的麻烦。
* */
/*public static void main(String[] args) throws IOException {
String str="ADFGHJKLUYTG";
ByteArrayInputStream inputStream=new ByteArrayInputStream(str.getBytes());
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
int temp=0;
while((temp=inputStream.read())!=(-1)){
char ch=(char) temp;
outputStream.write(Character.toLowerCase(ch));
}
String outStr= outputStream.toString();
inputStream.close();
outputStream.close();
System.out.println(outStr);
}*/

1、字节流和字符流的区别:

字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的,但是字符流在操作的 时候,是会用到缓冲区的,是通过缓冲区来操作文件的。

使用字节流好还是字符流好呢?

 答案是字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。

2、文件的复制:

方法一:DOS下就有一个文件复制功能

技术分享

方法二:用程序

/**
	 * 文件的复制
	 * @throws IOException 
	 * 思路:从一个文件中读取内容,边读边写入另一个文件。
	 * */
	public static void main(String[] args) throws IOException {
		String helloFileName="D:"+File.separator+"hello.txt";
		String rollenFileName="D:"+File.separator+"rollen.txt";
		File file1=new File(helloFileName);
		File file2=new File(rollenFileName);
		if(!file1.exists()){
			System.out.println("被复制的文件不存在!");
			System.out.println(1);
		}
		InputStream inputStream=new FileInputStream(file1);
		OutputStream outputStream=new FileOutputStream(file2);
		if(inputStream!=null&&outputStream!=null){
			int temp=0;
			while((temp=inputStream.read())!=(-1)){
				outputStream.write(temp);
			}
		}
		inputStream.close();
		outputStream.close();
	}

3、管道流

管道流主要用以进行两个线程之间的通信。

PipedOutputStream 管道输出流

 

PipedInputStream 管道输入流

/*消息发送类*/
public class Send implements Runnable{
	private PipedOutputStream out=null;
	public Send() {
		out=new PipedOutputStream();
	}
	public PipedOutputStream getOut(){
		return this.out;
	}
	@Override
	public void run() {
		String message="hello MM";
		try {
			out.write(message.getBytes());
		} catch (IOException e) {			
			e.printStackTrace();
		}
		try {
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

/*接受消息类*/
public class Recive implements Runnable{
	private PipedInputStream input=null;
	public Recive() {
		input=new PipedInputStream();
	}
	public PipedInputStream getInput(){
		return this.input;
	}
	@Override
	public void run() {
		byte[] bs=new byte[1000];
		int len=0;
		try {
			len=this.input.read(bs);
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			input.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("接收的内容是:"+(new String(bs, 0, len)));
	}

}


/*测试类*/
public static void main(String[] args) {
	Send send=new Send();
	Recive recive=new Recive();
	try {
		send.getOut().connect(recive.getInput());//管道连接
	} catch (IOException e) {		
		e.printStackTrace();
	}
	new Thread(send).start();
	new Thread(recive).start();
}
}

4、打印流

/* 使用PrintStream进行输出*/
	/*public static void main(String[] args) throws IOException {
		PrintStream printStream=new PrintStream(new FileOutputStream(new File("D:"+File.separator+"hello.txt")));
			printStream.print(true);
			printStream.print("GG");
			printStream.close();
	}*/
	
	/*使用PrintStream进行输出
	 * 并进行格式化*/
	/*public static void main(String[] args) throws IOException {
		PrintStream printStream=new PrintStream(new FileOutputStream(new File("D:"+File.separator+"hello.txt")));
		String name="GG";
		int age=26;
		printStream.printf("姓名:%s;年龄:%d!",name,age);
		printStream.close();
	}*/
	
	/*使用OutputStream向屏幕上输出内容*/
	public static void main(String[] args) {
		OutputStream out=System.out;
		try {
			out.write("MM".getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

  

 

java之IO整理(上)