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