`

IO流,相关文件操作

 
阅读更多
package org.hs.filecommon;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

import javax.swing.JFileChooser;


public class FileDemo {
	public static final String DEFAULT_ENCODING = "utf-8";
	public static final String OUT_FILE = "Writer.txt";
	private ArrayList<String> pathlist = new ArrayList<String>();

	/**
	 * 显示一个目录中的所有文件(包含子目录信息)
	 * 
	 * @param dir
	 *            目录
	 */
	public List<String> getFiles(File dir) {
		if (!dir.isDirectory()) {
			return null;
		}
		System.out.printf("目录:%s%n", dir.getAbsolutePath());// 获取文件的完整路径名称
		File[] fileList = dir.listFiles();
		for (File file : fileList) {
			if (file.isFile()) {
				System.out.printf("\t文件:%s%n", file.getAbsolutePath());
				pathlist.add(file.getAbsolutePath());
			}
		}
		for (File file : fileList) {
			if (file.isDirectory()) {
				getFiles(file);
			}
		}
		return pathlist;
	}

	/**
	 * 删除一个文件夹下所有文件夹
	 * 
	 * @param dir
	 */
	public void deleteFilesAll(String dir) {
		File fileDir = new File(dir);
		File[] files = fileDir.listFiles();
		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory()) {
				files[i].delete();
			}
		}
	}

	/**
	 * 复制一个文件夹下所有的文件到另一个目录
	 * @param dir1
	 * @param dir2
	 */
	public void copyOne(String dir1, String dir2) {
		File copyfiles = new File(dir1);
		File[] files = copyfiles.listFiles();
		for (int i = 0; i < files.length; i++) {
			if (!files[i].isDirectory()) {
				int bytesum = 0;
				int byteread = 0;
				try {
					InputStream inStream = new FileInputStream(files[i]); // 读入原文件
					FileOutputStream fs = new FileOutputStream(new File(dir2,
							files[i].getName()));
					byte[] buffer = new byte[5120];
					int length;
					while ((byteread = inStream.read(buffer)) != -1) {
						bytesum += byteread; // 字节数 文件大小
						System.out.println(bytesum);
						fs.write(buffer, 0, byteread);
					}
					inStream.close();
				} catch (Exception e) {
					System.out.println("复制单个文件操作出错");
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 输出文件内容
	 * 
	 * @param is
	 * @param os
	 * @param length
	 * @throws IOException
	 */
	public static void writeFileContent(InputStream is, OutputStream os,
			int length) throws Exception {
		os.write(length);
		byte[] bytes = new byte[1024];
		int size;
		if ((size = is.read(bytes)) != -1) {
			os.write(bytes, 0, size);
		}
	}

	/**
	 * 输出文件名
	 * 
	 * @throws IOException
	 */
	public static void writeFileName(File file, OutputStream os)
			throws IOException {
		byte[] fn_bytes = file.getName().getBytes();
		os.write(fn_bytes.length);// 输出文件名长度
		os.write(fn_bytes);
	}

	/**
	 * 创建文件并返回输出流
	 * 
	 * @param path
	 * @return
	 * @throws IOException
	 */
	public static FileOutputStream getFileOS(String path) throws IOException {
		File file = new File(path);
		if (!file.exists()) {
			file.createNewFile();
		}

		return new FileOutputStream(file);
	}

	public void getFiles() {
		/**
		 * 获取多个文件
		 */
		JFileChooser chooser = new JFileChooser();
		chooser.setMultiSelectionEnabled(true);
		chooser.showOpenDialog(null);

		File[] files = chooser.getSelectedFiles();
		StringBuilder sb = new StringBuilder();
		String topath = "f:\\hesai";
		File ff = new File(topath);
		if (!ff.exists()) {
			ff.mkdir();
		}
		for (int i = 0; i < files.length; i++) {
			if (!files[i].isDirectory()) {
				int bytesum = 0;
				int byteread = 0;
				try {
					InputStream inStream = new FileInputStream(files[i]); // 读入原文件
					FileOutputStream fs = new FileOutputStream(new File(topath,
							files[i].getName()));
					sb.append("文件名称:").append(files[i].getName()).append(" ");
					byte[] buffer = new byte[5120];
					while ((byteread = inStream.read(buffer)) != -1) {
						bytesum += byteread; // 字节数 文件大小
						sb.append("字节数::").append(bytesum).append(";   ");
						fs.write(buffer, 0, byteread);
					}
					inStream.close();
				} catch (Exception e) {
					System.out.println("复制单个文件操作出错");
					e.printStackTrace();
				}
			}
		}
		String info = sb.toString();
		System.out.println(info);
	}

	
	/**
	 * 可以指定编码格式(最理想)的文本输出流
	 * 
	 * @throws IOException
	 */
	public static void one() throws IOException {
		Random r = new Random();
		// 创建文件输出流,第二个参数表示为追加的方式输出
		OutputStream os = new FileOutputStream(OUT_FILE, true);
		// 转换为字符输出流,并指定文件编码为utf-8
		OutputStreamWriter osw = new OutputStreamWriter(os, DEFAULT_ENCODING);
		for (int i = 1; i < 10; i++) {
			osw.write(String.format("随机数输出:%d%n", r.nextInt(90) + 10));
			osw.flush();
		}
		osw.close();
		os.close();
		System.out.println("文本文件输出完毕!");
	}
	
	/**
	 * 最理想的数据读取类(必须jdk1.5及以上)
	 * 
	 * @throws IOException
	 */
	public static void two() throws IOException {
		InputStream is = new FileInputStream(OUT_FILE);
		// 以自定编码的方式读取输入流
		Scanner scanner = new Scanner(is, DEFAULT_ENCODING);
		while (scanner.hasNextLine()) {// 可以判读并逐行读取
			System.out.println(scanner.nextLine());
		}
		scanner.close();
	}

	/**
	 * 最简单的文本流输出流
	 * 
	 * @throws IOException
	 */
	public static void three() throws IOException {
		Writer w = new FileWriter(OUT_FILE); // 创建文本文件输出流
		// 创建最简单文本流输出对象,第二个参数表示遇到换行就自动输出,不用调用flush方法
		PrintWriter pw = new PrintWriter(w, true);
		pw.println(124); // 任何数据类型都会被这个对象转换成字符输出
		pw.println(true);
		pw.println("哈哈");
		pw.close();
		w.close();
		System.out.println("文本文件输出完毕!");
	}

	/**
	 * 旧版本的文本(优点为可以缓存,性能比较好)流读取
	 * 
	 * @throws IOException
	 */
	public static void four() throws IOException {
		BufferedReader br = new BufferedReader(new FileReader(OUT_FILE));
		String line = br.readLine(); // 也是逐行读取
		while (line != null) { // 只能通过读取的数据是否为空判断
			System.out.println(line);
			line = br.readLine();
		}
		br.close();
	}
	
	/**
	 * 目标:将SDsBEaA --aABDESs输出
	 * 简单易懂
	 * @param str
	 */
		public void sort4(String str) {
			char[] chars = str.toCharArray();
			ArrayList<Character> a1 = new ArrayList<Character>();
			for (char c : chars) {
				a1.add(c);
			}
			Collections.sort(a1, new Comparator<Character>() {
				public int compare(Character ch1, Character ch2) {

					char c1 = Character.toUpperCase(ch1);
					char c2 = Character.toUpperCase(ch2);
					if (c1 == c2 && ch1 > ch2) {// 以防小写字母仍然排在前面
						return 1;
					}
					return c1 - c2;
				}
			});
			System.out.println(a1);
		}
		
		public static void main(String[] args) {
			FileDemo fd=new FileDemo();
			fd.sort4("uYhjkLP");
		}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics