欢迎光临散文网 会员登陆 & 注册

Java中文乱码,IO流,读取,字符输出输入流,创建,复制或剪切效果,追加【诗书画唱】

2020-07-14 22:59 作者:诗书画唱  | 我要投稿

在项目的相对路径下新建一个txt文件,内容为你对IO流字符流的总结,使用IO流读取该文件的内容显示在控制台




package createFile;

import java.io.*;

import java.sql.*;

import java.util.Scanner;



public class io {

//个人心得:在最大,最前面的位置设置静态的Connetion链接,

// 方便后面的调用等。

static Connection con=DBUtilsPreparedStatement.getCon();

public static void main(String[] args)throws Exception {


File wenjian=new File("xiangDui.txt");

// if(wenjian.exists()){//用exists判断这个文件是否存在

// //如果存在就delete用删除掉,防止存在的文件中有内容

// wenjian.delete();

// }//用createNewFile创建文件

wenjian.createNewFile();

// ————————————————————

// 下面是把内容写入

// 自己建的或本身就有的文件

String neiRong="IO is importment";


FileWriter xieRu=new FileWriter(wenjian);

//

//写入文件(就像用吸管喝奶茶)的时候就是要声明

//write(写),flush(冲),close(关),每次

// 用吸管喝以口奶茶时都有奶茶(流体)冲到嘴巴中之后嘴巴关闭


xieRu.write(neiRong);

xieRu.flush();

//

// flush 英[flʌʃ]

// 美[flʌʃ]

// 冲(抽水马桶); (用水) 冲洗净,冲洗;

//

xieRu.close();


// ——————————————————————

// 下面是读取获取自己写的或本身就有的文件,

// 之后用System.out.print打印出读取得内容:

FileReader duDu=new FileReader(wenjian);

//读取文件可以一个字符一个字符的读,

//也可以一次读取多个字符 ,

//读取的时候不用flush清空管道,

// 只有写入的时候flush清空管道

char [] shuZu=new char[10];

int xiaBiao;

while((xiaBiao=duDu.read(shuZu))!=-1){

System.out.print(new String(shuZu,0,xiaBiao));

// new String(shuZu,0,xiaBiao):

// 把一个字节数组by从0取到xiaBiao,

// 取出来之后转换成String类型

}

duDu.close();

// 读取和写入都最后要用close


}



}


防止中文乱码的方法:






使用File对象在项目根目录创建一个aa.txt的文件,使用字符输出流将内容”一闪一闪亮晶晶,漫天都是小星星”输出到该文件中


package createFile;

import java.io.*;

public class zhuiJiaRoot {

public static void main(String[] args) throws Exception{

File wenjian=new File("src//aa.txt");

wenjian.createNewFile();

//输出流(追加内容),zhuiJia:追加

FileWriter xieRu=new FileWriter(wenjian , true);

String neiRong="一闪一闪亮晶晶,漫天都是小星星";//声明内容

xieRu.write(neiRong);//写出数据

xieRu. flush();//清空管道

xieRu. close();//关闭链接"

//Writer为字符输出流

//Reader为字符输入流

System.out.println("追加成功!请鼠标右键点\n"

+ "项目文件来刷新文件等");

}

}




在相对目录中新建.txt文件追加内容到里面:

package createFile;


import java.io.*;


public class xieRu {

public static void main(String[] args) throws Exception{

File wenjian=new File("zhuiJia.txt");

wenjian.createNewFile();

//输出流(追加内容),zhuiJia:追加

FileWriter xieRu=new FileWriter(wenjian , true);

String neiRong="给诗书画唱一键三连和关注";//声明内容

xieRu.write(neiRong);//写出数据

xieRu. flush();//清空管道

xieRu. close();//关闭链接"


System.out.println("追加成功!请鼠标右键点\n"

+ "项目文件(就是最大,最外面的目录,\n"

+ "比如[file文件和IO流]\n"

+ "的[refresh],来刷新文件等");

}

}




制作复制效果



package createFile;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

/**个人的心得:

 * 文件复制功能:

 * 从一个输入流中读取数据,然后通过输出流写入目标位置

 *一边读,一边写(意思就是copy("(要复制的原文件路径)"

 *,"(要复制的新的和原文件内容一致的路径)")


 */

public class copyXiaoGuo {

 

public static void main(String[] args) {

System.out.println("开始复制...");

copyFangFa("zhuiJia.txt","zhuiJia2.txt");

System.out.println("复制成功!");

}

// copyFangFa:复制方法(自己封装和命名的方法)

// target 英[ˈtɑːɡɪt]

// 美[ˈtɑːrɡɪt]

// n. 目标; 

// src:源


private static void copyFangFa(String yuanLaiWenJian,String fuZhiWenJian) {

//创建源文件,和目标文件:


File srcFile = new File(yuanLaiWenJian);

File targetFile = new File(fuZhiWenJian);

//// yuanLaiWenJian:原来的文件

// fuZhiWenJian:复制的文件

//创建输入输出流

InputStream in =  null;

OutputStream out = null;


try {

in = new FileInputStream(srcFile);

out = new FileOutputStream(targetFile);

byte[] byteShuZu = new byte[1024];

int len = -1;

while((len = in.read(byteShuZu))!=-1) {

out.write(byteShuZu,0,len);

}


} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally {

try {

if(in != null) in.close();

if(out != null) out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

 

}





使用File对象在项目根目录下创建一个bb.txt的文件,使用字符输入流将aa.txt的内容读取出来后在内容后追加内容”明天会更好”




package createFile;

import java.io.*;

import java.sql.*;

import java.util.Scanner;



public class shuLuLiuZhuiJia {


static Connection con=DBUtilsPreparedStatement.getCon();

public static void main(String[] args)throws Exception {



File aaWenjian=new File("src//aa.txt");

FileReader duQu=new FileReader(aaWenjian);

// duQu:读取

char [] shuZu=new char[100];

// 100为要读取的内容的字节长度

int xiaBiao;

while((xiaBiao=duQu.read(shuZu))!=-1){

System.out.print(new String(shuZu,0,xiaBiao));





File wenjian=new File("src//bb.txt");


wenjian.createNewFile();


FileWriter xieRu=new FileWriter(wenjian);


xieRu.write(new String(shuZu,0,xiaBiao));

xieRu.flush();


xieRu.close();

}


duQu.close();


File bbWenjian=new File("src//bb.txt");

bbWenjian.createNewFile();

//输出流(追加内容),zhuiJia:追加

FileWriter xieRu=new FileWriter(bbWenjian , true);

String neiRong="明天会更好";//声明内容

xieRu.write(neiRong);//写出数据

xieRu. flush();//清空管道

xieRu. close();//关闭链接"

//Writer为字符输出流

//Reader为字符输入流

System.out.println("\n追加成功!请鼠标右键点\n"

+ "项目文件来刷新文件等");


}



}






制作剪切效果


剪切(电脑术语)bai是指把你选中的du信息放入到剪切板中,后zhi续操作一般是“粘dao贴”,在一个新地方完成“粘贴”步骤后,原来地方的信息自动删除,剪切板中的信息会在新地方中出现。


简言之,假设有两个文件夹甲、乙,在甲文件夹中有信息A。打开甲文件夹,将信息A剪切,然后打开乙文件夹,选择“粘贴”,那么信息A就从甲文件夹中消失,它跑到了乙文件夹中。





package createFile;


import java.io.*;



public class jianQieXiaoGuo {

// 个人习惯的命名方法规则:

// copyFangFa_1在copyFangFa里面被调用,

// XXX_1都在XXX里面

    public static void copyFangFa_1(File yuanLai, File Xin) 

    throws IOException {

//

//buffered 英[ˈbʌfəd]

//美[ˈbʌfərd]

//v. 减少,减缓(伤害); 保护; 使不受…的侵害; 缓冲存储; 缓存;

//

   

        BufferedInputStream huanChongLiuShuRuLiu = 

new BufferedInputStream(new FileInputStream(yuanLai));

        BufferedOutputStream huanChongShuChuLiu =

 new BufferedOutputStream(new FileOutputStream(Xin));

        int xiaBiao = 0;

        byte[] ziJieShuZu = new byte[1024];

  while ((xiaBiao = huanChongLiuShuRuLiu.read(ziJieShuZu)) != -1) {

  huanChongShuChuLiu.write(ziJieShuZu, 0, xiaBiao);

        }

        huanChongLiuShuRuLiu.close();

        huanChongShuChuLiu.close();

    }



    public static void copyFangFa(File yuanLai,

    File xin) throws Exception {

        if (!xin.exists()) {

            xin.mkdirs();

  // mkdir:创建指定的一个目录,

//mkdirs:可创建多层原来不存在的目录(即多级目录)

        }

        File[] shuZu = yuanLai.listFiles();

        for (int i = 0; i < shuZu.length; i++) {

            if (shuZu[i].isFile()) {

   copyFangFa_1(shuZu[i], new File(xin.getPath() 

   + "//" + shuZu[i].getName()));

            } else 

            {// 此处"\\"或写成"//"等都可以,仅适用于windows平台,

//            若想实现通用,可将其改为separator

//            separator 英[ˈsepəreɪtə(r)]

//            美[ˈsepəreɪtər]

//            n. 分离器; 分选机;


 copyFangFa(shuZu[i], new File(xin.getPath() 

+ "//" + shuZu[i].getName()));

            }

        }

    }


    // 创建删除方法,复制完成后删除文件

//    chuanRuWenJian:传入文件

//    shanChuFangFa:删除方法

    public static void shanChuFangFa(File chuanRuWenJian) {

        if (chuanRuWenJian.isFile()) {

            chuanRuWenJian.delete();

        } else {

            File[] shuZu = chuanRuWenJian.listFiles();

            for (int i = 0; i < shuZu.length; i++) {

                shanChuFangFa(shuZu[i]);

            }

            chuanRuWenJian.delete();

        }

    }


    public static void main(String[] args) throws Exception {

        

        File yuanLai = new File("D://原来");

        // File yuanLai = new File("OldPath");

//        "OldPath":旧的文件路径

        File xin = new File("D://新");

//        File xin = new File("NewPath");

// "NewPath":新的文件路径

        copyFangFa(yuanLai, xin);

        System.out.println("\n原来的文件夹中的文件复制"

        + "\n到新文件夹中完成");

        shanChuFangFa(yuanLai);

        System.out.println("\n\n原来的文件夹的文件删除完成");

        System.out.println("\n\n剪切完成");

 

    }


}



执行后:




Java中文乱码,IO流,读取,字符输出输入流,创建,复制或剪切效果,追加【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律