Java IO的简单示例

File类示例

public class FileUsageTest {
    private static void usage() {
        System.err.println("Usage: FileUsageTest path1 ... \n" + "Creates each path\n"
                + "Usage: FileUsageTest -d path1 ...\n" + "Deletes each path\n"
                + "Usage: FileUsageTest -r path1 path2\n" + "Renames from path1 to path2");
        System.exit(1);
    }

    /**
     * 获取文件元数据信息
     * 
     * @param f
     */
    private static void fileData(File f) {
        System.out.println("Absolute Path: " + f.getAbsolutePath() + "\n Readable: " + f.canRead() + "\n Writable: " + f.canWrite()
                + "\n Name: " + f.getName() + "\n Parent Dir: " + f.getParent() + "\n Size: " + f.length() + "\n Last Modified: "
                + f.lastModified());

        if (f.isFile()) {
            System.out.println(f + " is a file");
        } else if (f.isDirectory()) {
            System.out.println(f + " is a directory");
        }
    }

    /**
     * 通过传入参数控制功能
     * 
     * @param args
     */
    public static void main(String[] args) {
        // 参数不符合要求
        if (args.length < 1) {
            usage();
        } else if (args[0].equals("-r")) { // 重命名文件
            if (args.length != 3)
                usage();
            File old = new File(args[1]);
            File rname = new File(args[2]);
            if (old.renameTo(rname)) {
                System.out.println("Rename file " + old + " to " + rname + " successfully");
            } else {
                System.out.println("Rename file " + old + " to " + rname + " fail");
            }
            fileData(old);
            fileData(rname);
        } else if (args[0].equals("-d")) { // 依次删除文件
            for (int i = 1; i < args.length; i++) {
                File f = new File(args[i]);

                if (f.delete()) {
                    System.out.println(f + " exists");
                    System.out.println("Delete " + f + " successfully");
                } else {
                    System.out.println("Delete " + f + " fail");
                }
                fileData(f);
            }
        } else { // 创建文件
            for (String arg : args) {
                File f = new File(arg);

                try {
                    if (f.createNewFile()) {
                        System.out.println("Created " + f + " successfully");
                    } else {
                        System.out.println("Created " + f + " fail");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }

                fileData(f);
            }
        }
    }
}

 

 

运行 java e:\\test\\testFile1 e:\\test\\testFile2

Created e:\test\testFile1 successfully
Absolute Path: e:\test\testFile1
Readable: true
Writable: true
Name: testFile1
Parent Dir: e:\test
Size: 0
Last Modified: 1378630413535
e:\test\testFile1 is a file
Created e:\test\testFile2 successfully
Absolute Path: e:\test\testFile2
Readable: true
Writable: true
Name: testFile2
Parent Dir: e:\test
Size: 0
Last Modified: 1378630413536
e:\test\testFile2 is a file

 

运行 java -r e:\\test\\testFile1 e:\\test\\testFile3

Rename file e:\test\testFile1 to e:\test\testFile3 successfully
Absolute Path: e:\test\testFile1
Readable: false
Writable: false
Name: testFile1
Parent Dir: e:\test
Size: 0
Last Modified: 0
Absolute Path: e:\test\testFile3
Readable: true
Writable: true
Name: testFile3
Parent Dir: e:\test
Size: 0
Last Modified: 1378630413535
e:\test\testFile3 is a file

 

运行 -d e:\\test\\testFile1 e:\\test\\testFile2

Delete e:\test\testFile1 fail
Absolute Path: e:\test\testFile1
Readable: false
Writable: false
Name: testFile1
Parent Dir: e:\test
Size: 0
Last Modified: 0
e:\test\testFile2 exists
Delete e:\test\testFile2 successfully
Absolute Path: e:\test\testFile2
Readable: false
Writable: false
Name: testFile2
Parent Dir: e:\test
Size: 0
Last Modified: 0

 

 

 FilenameFilter示例

/**
 * 用于File.list()方法回调的文件名过滤器
 * 返回list()中自定义正则表达式匹配的文件名
 *
 * @author zhenwei.liu created on 2013 13-8-20 上午11:08
 * @version $Id$
 */
public class RegxFilenameFilter implements FilenameFilter {

    private Pattern pattern;

    public RegxFilenameFilter(String regx) {
        this.pattern = Pattern.compile(regx);
    }

    @Override
    public boolean accept(File dir, String name) {
        return pattern.matcher(name).matches();
    }

    public static void main(String[] args) {
        File path = new File("D:\\");
        // 此处可以考虑使用匿名类解决问题
        String[] list = path.list(new RegxFilenameFilter("\\w+"));
        Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
        for (String file : list) {
            System.out.println(file);
        }

    }
}

AliWangWang

CollabNet
data
Datagenerator
Evolus
Fiddler2
home
javalib
KuGou
mavenrepo
my_config_files

...

 

 

执行系统命令

public class OSExecute {
    public static void command(String command) {
        boolean err = false;
        try {
            // 执行命令
            Process process = new ProcessBuilder(command.split(" ")).start();

            String s;
            // 获取标准输出
            BufferedReader stdOut = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
            while ((s = stdOut.readLine()) != null)
                System.out.println(s);

            // 获取标准错误输出
            BufferedReader errOut = new BufferedReader(new InputStreamReader(process.getErrorStream(), "GBK"));
            while ((s = errOut.readLine()) != null) {
                System.out.println(s);
                err = true;
            }
        } catch (Exception e) {
            if (!command.startsWith("CMD /C"))
                command("CMD /C " + command);
            else
                throw new RuntimeException(e);
        }

        if (err)
            throw new OSExecuteException("Errors executing " + command);
    }

    public static void main(String[] args) {
        command("dir c:\\");
    }
}

驱动器 C 中的卷没有标签。
卷的序列号是 C47F-784D

c:\ 的目录

2012/11/08 16:13 <DIR> Dell
2013/08/28 18:02 <DIR> IdeaProjects
2013/08/09 02:24 <DIR> Intel
2009/07/14 11:20 <DIR> PerfLogs
2013/09/03 16:19 <DIR> Program Files
2013/09/01 18:28 <DIR> Program Files (x86)
2013/07/24 23:50 <DIR> Ruby200-x64
2013/08/28 17:12 <DIR> svn_repository
2013/09/01 19:26 <DIR> Users
2013/09/04 22:22 <DIR> Windows
0 个文件 0 字节
10 个目录 77,945,860,096 可用字节

 

BufferedReader示例

public class BufferedReaderTest {
    public static String read(String filename) throws IOException {
        // 装饰器的使用
        BufferedReader br = new BufferedReader(new FileReader(filename));
        String s;
        StringBuilder sb = new StringBuilder();
        try {
            while ((s = br.readLine()) != null) {
                sb.append(s);
                sb.append("\n");
            }
        } finally {
            br.close();
        }
        return sb.toString();
    }

    public static void main(String[] args) throws IOException {
        System.out.println(read(Data.IN_FILE_PATH));
    }
}

 

 

StringReader示例

public class StringReaderTest {

    public static void main(String[] args) throws IOException {
        StringReader in = new StringReader(BufferedReaderTest.read(Data.IN_FILE_PATH));
        int c;
        try {
            while ((c = in.read()) != -1) {
                // 可以直接读取中文
                System.out.print((char) c);
            }
        } finally {
            in.close();
        }
    }
}

 

 

DataInputStream示例

/**
 * DataInputStream主要用于读取格式化的int,long,byte等基本类型,并且这是平台无关的
 * 
 * @author zhenwei.liu created on 2013 13-8-22 下午9:57
 * @version $Id$
 */
public class DataInputStreamTest {

    public static void main(String[] args) throws IOException {
        DataInputStream in = new DataInputStream(new ByteArrayInputStream(BufferedReaderTest.read(Data.IN_FILE_PATH)
                .getBytes()));
        try {
            while (in.available() != 0) {
                // 单字节读,中文会乱码
                System.out.print((char) in.readByte());
            }
        } finally {
            in.close();
        }
    }
}

 

PrintWriter示例

public class PrintWriterTest {

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new FileReader(Data.IN_FILE_PATH));
        // PrintWriter的便捷构造方法
        // 等同于 new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))))
        PrintWriter out = new PrintWriter(Data.OUT_FILE_PATH);
        // PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(Data.OUT_FILE_PATH)));
        String s;
        int lineCount = 0;
        try {
            while ((s = in.readLine()) != null) {
                out.println(++lineCount + " : " + s);
            }
        } finally {
            out.close();
            in.close();
        }

        System.out.println(BufferedReaderTest.read(Data.OUT_FILE_PATH));
    }
}

 

System.in示例

/**
 * System.in测试,回显输入的每一行
 * 
 * @author zhenwei.liu created on 2013 13-8-24 下午1:12
 * @version $Id$
 */
public class SystemInTest {

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String s;
        try {
            while ((s = in.readLine()) != null && !s.equals(""))
                System.out.println(s);
        } finally {
            in.close();
        }

    }
}

 

System.out示例

public class SystemOutTest {

    public static void main(String[] args) {
        PrintWriter printWriter = new PrintWriter(System.out, true);
        printWriter.println("I'm System.out");
    }
}

 

你可能感兴趣的:(java io)