`

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");
		}
}

 

分享到:
评论

相关推荐

    java io 流,文件读取操作

    Java IO 流、文件读取操作 Java IO 流是 Java 语言中的一种基本输入/输出机制,它提供了多种方式来处理输入/输出操作。在 Java 中,IO 流可以分为两大类:字节流和字符流。字节流主要用于处理二进制数据,而字符流...

    android的IO流读写文件demo.zip_DEMO_android_android的IO流读写文件操作

    在实际应用中,开发者通常会结合Android的存储API(如`File`类、`ContentResolver`等)以及IO流,以实现更复杂的文件操作。通过熟练掌握这些基础知识,可以有效地在Android系统中进行文件读写操作,满足各种需求。

    通过IO流把文件传到前端并下载.zip

    在Java开发中,将文件传输到前端并允许用户下载是一个常见的需求。这个场景通常涉及到服务器端的文件处理、HTTP响应的构建以及...理解这些核心概念和技术,对于实现“通过IO流把文件传到前端并下载”的功能至关重要。

    IO流文件操作(注释版)

    标题中的"IO流文件操作(注释版)"是指在编程中使用I/O流进行文件操作,特别是关于C++中的文件处理。I/O流是一种在程序与外部设备(如文件)之间传输数据的方式,它允许程序员以一种统一的、抽象的方式来处理输入和...

    Java中文件IO流.pdf

    Java 中文件 IO 流 Java 中文件 IO 流是指 Java 语言中对文件的输入输出操作,通过定义文件流来实现文件的读写...在 Java 中,文件 IO 流操作是非常重要的,掌握文件 IO 流操作可以帮助我们更好地处理文件相关的任务。

    java 使用IO流实现文件的复制

    本篇文章将详细介绍如何使用Java的IO流来实现文件的复制。 首先,我们需要了解Java中的IO流体系。Java的IO库基于流的概念,流可以视为数据的序列,可以从源(如键盘、文件)读取到目的地(如显示器、文件)。IO流...

    JAVA课件\IO流及文件操作

    java I\O流及文件操作,是初学者很好的资源。

    io流中的文件操作

    io流中的文件操作,直接粘贴去eclipse或者cmd就可以运行。

    IO流读取和创建文件

    本文将详细讲解如何使用IO流来读取和创建文件,以及涉及的相关概念和技术。 首先,理解IO流的基本概念至关重要。IO流可以被视为数据传输的管道,允许我们从一个源头(如磁盘上的文件)读取数据,并将其写入目的地...

    Java IO流和文件操作实现过程解析

    Java IO流和文件操作实现过程解析 Java IO流和文件操作实现过程解析是Java语言中的一种基本操作,IO流是Java中处理输入输出的基础。Java中的IO流主要包括两种类型:字节流和字符流。字节流用于处理二进制数据,而...

    Java-Io流,练习

    七、文件操作练习 在你给出的"demo17"和"task09"这两个文件中,很可能是包含了针对文件读写的实例代码。例如,可能涉及使用`FileInputStream`和`FileOutputStream`进行简单的文件复制,或者使用`BufferedReader`和`...

    java 文件操作及IO流

    Java 文件操作与IO流是Java编程中的核心概念,主要用于数据的读取、写入和传输。在Java中,文件操作通常涉及到`java.io`包下的类,如`File`、`FileOutputStream`、`OutputStreamWriter`和`BufferedWriter`等。下面将...

    IO流三种流方式的文本文件的复制

    总结起来,Java的IO流提供了丰富的功能来处理文件操作。在复制文本文件时,可以根据实际需求选择合适的流类型,如简单文本处理可选用FileReader和FileWriter,追求效率时可采用BufferedReader和BufferedWriter。理解...

    IO流pdf宝典

    ### JAVA IO流概念及其应用详解 ...通过对以上知识点的学习,我们可以了解到JAVA IO流在处理文件和其他设备上的数据时的强大功能。掌握好这些基本概念和技巧,能够帮助开发者更好地处理各种数据操作需求。

    IO文件流操作

    Java 7引入了NIO.2,引入了Path、Files、Paths等新类,使得文件操作更加简洁。 总结,Java中的IO文件流操作是编程中必不可少的部分,理解并熟练掌握各类流的使用,能够有效提升程序的效率和灵活性。在实际开发中,...

    JAVA 的IO流的文件复制

    总结,Java的IO流提供了强大而灵活的文件操作功能,通过`FileInputStream`和`FileOutputStream`可以实现文件的复制,而通过递归调用可以实现整个文件夹的复制。在实际开发中,我们需要根据具体需求进行相应的异常...

    java的IO流实现文件复制20190726.zip

    Java的IO流是Java平台中处理输入/输出操作的核心组件,它允许程序与...通过组合不同的输入流和输出流,我们可以构建出适应不同需求的文件操作解决方案。理解并熟练掌握IO流的使用,是每个Java开发者必备的技能之一。

    IO流 javaio java 流

    总的来说,Java的IO流体系结构复杂而强大,它提供了多种工具和策略来处理各种数据传输场景,包括文件操作、网络通信、对象序列化等。理解并熟练运用这些流可以帮助我们构建高效、可靠的Java应用程序。

    java IO流实例,包括文件的读写、上传和下载

    总结来说,Java IO流是处理输入输出的核心工具,无论是在本地文件系统还是在网络环境中,都能提供高效、灵活的文件操作手段。通过组合不同的流类,可以实现复杂的文件读写、上传和下载任务,同时适应文本和非文本...

    io流写入和读取

    "io流写入和读取"这个主题涵盖了如何使用IO流进行数据的存储和检索,通常涉及到文件操作、数据序列化以及与数据库的交互。在本篇文章中,我们将深入探讨这些关键知识点。 首先,IO流是Java中的一个基础概念,它允许...

Global site tag (gtag.js) - Google Analytics