• Java IO的简单示例


    File类示例

    public class FileUsageTest {
        private static void usage() {
            System.err.println("Usage: FileUsageTest path1 ... 
    " + "Creates each path
    "
                    + "Usage: FileUsageTest -d path1 ...
    " + "Deletes each path
    "
                    + "Usage: FileUsageTest -r path1 path2
    " + "Renames from path1 to path2");
            System.exit(1);
        }
    
        /**
         * 获取文件元数据信息
         * 
         * @param f
         */
        private static void fileData(File f) {
            System.out.println("Absolute Path: " + f.getAbsolutePath() + "
     Readable: " + f.canRead() + "
     Writable: " + f.canWrite()
                    + "
     Name: " + f.getName() + "
     Parent Dir: " + f.getParent() + "
     Size: " + f.length() + "
     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: est estFile1 successfully
    Absolute Path: e: est estFile1
    Readable: true
    Writable: true
    Name: testFile1
    Parent Dir: e: est
    Size: 0
    Last Modified: 1378630413535
    e: est estFile1 is a file
    Created e: est estFile2 successfully
    Absolute Path: e: est estFile2
    Readable: true
    Writable: true
    Name: testFile2
    Parent Dir: e: est
    Size: 0
    Last Modified: 1378630413536
    e: est estFile2 is a file

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

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

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

    Delete e: est estFile1 fail
    Absolute Path: e: est estFile1
    Readable: false
    Writable: false
    Name: testFile1
    Parent Dir: e: est
    Size: 0
    Last Modified: 0
    e: est estFile2 exists
    Delete e: est estFile2 successfully
    Absolute Path: e: est estFile2
    Readable: false
    Writable: false
    Name: testFile2
    Parent Dir: e: est
    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("
    ");
                }
            } 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");
        }
    }
  • 相关阅读:
    艾伟:一个让人遗忘的角落—Exception(二) 狼人:
    艾伟:ASP.NET 2.0的编译模型 狼人:
    艾伟:VS 2008快捷键 狼人:
    艾伟:[一步一步MVC]第一回:使用ActionSelector控制Action的选择 狼人:
    艾伟:C# Design Patterns (3) Decorator 狼人:
    艾伟:详解AJAX核心 —— XMLHttpRequest 对象 (下) 狼人:
    艾伟:HTML重构:战略篇 狼人:
    艾伟:WCF安全之EndPointIdentity 狼人:
    翻转句子中单词的顺序
    menucool
  • 原文地址:https://www.cnblogs.com/zemliu/p/3308643.html
Copyright © 2020-2023  润新知