1. 程式人生 > >Java 讀取、寫入 本地檔案,圖片

Java 讀取、寫入 本地檔案,圖片

一、java方式
二、java.io方式

demo.class.getClassLoader().getResource("fixture").getFile();
#從根目錄下開始,讀取target目錄下的檔案

一、java方式

1、使用FileWriter類寫文字檔案
2、使用FileWriter類往文字檔案中追加資訊
3、使用BufferedWriter類寫文字檔案
4、使用FileReader類讀文字檔案
5、使用BufferedReader類讀文字檔案


public class MainClass{
        public static void main(String[] args){
                
        }
        /**
         * 使用FileWriter類寫文字檔案
         */
        public static void writeMethod1(){
                String fileName="C:\\kuka.txt";
                try{
                        //使用這個建構函式時,如果存在kuka.txt檔案,
                        //則先把這個檔案給刪除掉,然後建立新的kuka.txt
                        FileWriter writer=new FileWriter(fileName);
                        writer.write("Hello Kuka:\n");
                        writer.write("  My name is coolszy!\n");
                        writer.write("  I like you and miss you。");
                        writer.close();
                } catch (IOException e){
                        e.printStackTrace();
                }
        }
        /**
         * 使用FileWriter類往文字檔案中追加資訊
         */
        public static void writeMethod2() {
                String fileName="C:\\kuka.txt";
                try{
                        //使用這個建構函式時,如果存在kuka.txt檔案,
                        //則直接往kuka.txt中追加字串
                        FileWriter writer=new FileWriter(fileName,true);
                        SimpleDateFormat format=new SimpleDateFormat();
                        String time=format.format(new Date());
                        writer.write("\n\t"+time);
                        writer.close();
                } catch (IOException e){
                        e.printStackTrace();
                }
        }
        //注意:上面的例子由於寫入的文字很少,使用FileWrite類就可以了。但如果需要寫入的
        //內容很多,就應該使用更為高效的緩衝器流類BufferedWriter。
        /**
         * 使用BufferedWriter類寫文字檔案
         */
        public static void writeMethod3(){
                String fileName="C:/kuka.txt";
                try{
                        BufferedWriter out=new BufferedWriter(new FileWriter(fileName));
                        out.write("Hello Kuka:");
                        out.newLine();  //注意\n不一定在各種計算機上都能產生換行的效果
                        out.write("  My name is coolszy!\n");
                        out.write("  I like you and miss you。");
                        out.close();
                } catch (IOException e){
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
        /**
         * 使用FileReader類讀文字檔案
         */
        public static void readMethod1(){
                String fileName="C:/kuka.txt";
                int c=0;
                try{
                        FileReader reader=new FileReader(fileName);
                        c=reader.read();
                        while(c!=-1){
                                System.out.print((char)c);
                                c=reader.read();
                        }
                        reader.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
        
        /**
         * 使用BufferedReader類讀文字檔案
         */
        public static void readMethod2() {
                String fileName="c:/kuka.txt";
                String line="";
                try{
                        BufferedReader in=new BufferedReader(new FileReader(fileName));
                        line=in.readLine();
                        while (line!=null){
                                System.out.println(line);
                                line=in.readLine();
                        }
                        in.close();
                } catch (IOException e){
                        e.printStackTrace();
                }
        }
}

二、java.io方式

1、InputStream、OutputStream(位元組流)
2、BufferedInputStream、BufferedOutputStream(快取位元組流)使用和位元組流差不多,但效率更高(推薦使用)
3、InputStreamReader、OutputStreamWriter(位元組流,這種方式不建議使用,不能直接位元組長度讀寫)。使用範圍用做字元轉換
4、BufferedReader、BufferedWriter(快取流,提供readLine方法讀取一行文字)
5、Reader、PrintWriter(PrintWriter這個很好用,在寫資料的同事可以格式化)


1、InputStream、OutputStream(位元組流)
//讀取檔案(位元組流)
        InputStream in = new FileInputStream("d:\\1.txt");
        //寫入相應的檔案
        OutputStream out = new FileOutputStream("d:\\2.txt");
        //讀取資料
        //一次性取多少位元組
        byte[] bytes = new byte[2048];
        //接受讀取的內容(n就代表的相關資料,只不過是數字的形式)
        int n = -1;
        //迴圈取出資料
        while ((n = in.read(bytes,0,bytes.length)) != -1) {
            //轉換成字串
            String str = new String(bytes,0,n,"GBK"); #這裡可以實現位元組到字串的轉換,比較實用
            System.out.println(str);
            //寫入相關檔案
            out.write(bytes, 0, n);
        }
        //關閉流
        in.close();
        out.close();


    2、BufferedInputStream、BufferedOutputStream(快取位元組流)使用和位元組流差不多,但效率更高(推薦使用)
        //讀取檔案(快取位元組流)
        BufferedInputStream in = new BufferedInputStream(new FileInputStream("d:\\1.txt"));
        //寫入相應的檔案
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:\\2.txt"));
        //讀取資料
        //一次性取多少位元組
        byte[] bytes = new byte[2048];
        //接受讀取的內容(n就代表的相關資料,只不過是數字的形式)
        int n = -1;
        //迴圈取出資料
        while ((n = in.read(bytes,0,bytes.length)) != -1) {
            //轉換成字串
            String str = new String(bytes,0,n,"GBK");
            System.out.println(str);
            //寫入相關檔案
            out.write(bytes, 0, n);
        }
        //清楚快取
        out.flush();
        //關閉流
        in.close();
        out.close();


    3、InputStreamReader、OutputStreamWriter(位元組流,這種方式不建議使用,不能直接位元組長度讀寫)。使用範圍用做字元轉換
        //讀取檔案(位元組流)
        InputStreamReader in = new InputStreamReader(new FileInputStream("d:\\1.txt"),"GBK");
        //寫入相應的檔案
        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("d:\\2.txt"));
        //讀取資料
        //迴圈取出資料
        byte[] bytes = new byte[1024];
        int len = -1;
        while ((len = in.read()) != -1) {
            System.out.println(len);
            //寫入相關檔案
            out.write(len);
        }
        //清楚快取
        out.flush();
        //關閉流
        in.close();
        out.close();


    4、BufferedReader、BufferedWriter(快取流,提供readLine方法讀取一行文字)
        //讀取檔案(字元流)
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\1.txt"),"GBK"));#這裡主要是涉及中文
        //BufferedReader in = new BufferedReader(new FileReader("d:\\1.txt")));
        //寫入相應的檔案
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\2.txt"),"GBK"));
        //BufferedWriter out = new BufferedWriter(new FileWriter("d:\\2.txt"));
        //讀取資料
        //迴圈取出資料
        String str = null;
        while ((str = in.readLine()) != null) {
            System.out.println(str);
            //寫入相關檔案
            out.write(str);
            out.newLine();
        }
        //清楚快取
        out.flush();
        //關閉流
        in.close();
        out.close();


5、Reader、PrintWriter(PrintWriter這個很好用,在寫資料的同事可以格式化)
        //讀取檔案(位元組流)
        Reader in = new InputStreamReader(new FileInputStream("d:\\1.txt"),"GBK");
        //寫入相應的檔案
        PrintWriter out = new PrintWriter(new FileWriter("d:\\2.txt"));
        //讀取資料
        //迴圈取出資料
        byte[] bytes = new byte[1024];
        int len = -1;
        while ((len = in.read()) != -1) {
            System.out.println(len);
            //寫入相關檔案
            out.write(len);
        }
        //清楚快取
        out.flush();
        //關閉流
        in.close();
        out.close();