A. 鐢╦ava io娴佹妸澶氫釜txt鏂囦欢鐨勫唴瀹瑰悎骞跺埌涓涓鏂囦欢閲
鍙傝冧唬鎮勬槬鐮佸備笅锛
public static void mergeFiles(String outFile, String[] files)
绗涓涓鍙傛暟鏄鍚堝苟鍚庣敓鎴愭枃浠剁殑璺鏃╄繍鏋濆緞
绗浜屼釜鍙傛暟鏄浣犻渶瑕佸悎骞剁殑鏂囨湰鏂囦欢鍒楄〃
浠g爜锛
java">packageorg.lq.util;
importstaticjava.lang.System.out;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.nio.ByteBuffer;
importjava.nio.CharBuffer;
importjava.nio.channels.FileChannel;
importjava.nio.charset.Charset;
importjava.nio.charset.CharsetDecoder;
importjava.nio.charset.CharsetEncoder;
importjava.util.Arrays;
publicclassMergeFile{
publicstaticfinalintBUFSIZE=1024*8;
publicstaticvoidmergeFiles(StringoutFile,String[]files){
FileChanneloutChannel=null;
out.println("Merge"+Arrays.toString(files)+"into"+outFile);
try{
outChannel=newFileOutputStream(outFile).getChannel();
for(Stringf:files){
Charsetcharset=Charset.forName("utf-8");
CharsetDecoderchdecoder=charset.newDecoder();
CharsetEncoderchencoder=charset.newEncoder();
FileChannelfc=newFileInputStream(f).getChannel();
ByteBufferbb=ByteBuffer.allocate(BUFSIZE);
CharBuffercharBuffer=chdecoder.decode(bb);
ByteBuffernbuBuffer=chencoder.encode(charBuffer);
while(fc.read(nbuBuffer)!=-1){
bb.flip();
nbuBuffer.flip();
outChannel.write(nbuBuffer);
bb.clear();
nbuBuffer.clear();
}
fc.close();
}
out.println("Merged!!");
}catch(IOExceptionioe){
ioe.printStackTrace();
}finally{
try{if(outChannel!=null){outChannel.close();}}catch(IOException闄嗘晱ignore){}
}
}
}
B. Java字符流和字节流对文件操作的区别
一、java的IO流分两种流 :
1、字节流 InputStream OutputStream
2、字符流 Reader Writer
他们都是抽象类
二、他们的区别:
1、字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
2、字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
字节流转换成字符流可以用 InputSteamReader OutputStreamWriter
//字节流转换成InputStreamReader
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
//InputStreamReader 转换成带缓存的bufferedReader
BufferedReader bufferedReader = new BufferedReader(inputSteamReader);
C. java 中简述使用流进行读写文本文件的步骤
读写是两个不同的分支,通常都是分开单独使用的。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:
OutputStreamWriter pw = null;//定义一个流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
pw.write("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次write
pw.close();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
D. java我用流来复制文件可是老是拒绝访问怎么回事
兄弟,首先window环境下文件目录是不能用Java流来读取的,目录是使用mkdir或者mkdirs方法创建的。
第二你复制的时候BufferedInputStream的read() 每次是读取一个字节,你用int来接收,这样会隐式转型成4个字节,复制的文件会不对。
第三文件读取的截至调试是返回的 -1 , 不是 1,也不是0
第四当然能正确关闭流这是对的,但是缓存流关闭流的时候,并没有关闭FileInputStream和FileOutputStream,所以建议在关闭缓存流之前先关闭掉FileInputStream和FileOutputStream。
文件复制我是这么写的:
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class MyFile extends File {
private List<MyFile> childFiles;
public MyFile(String pathname) {
super(pathname);
}
public MyFile(File file) {
super(file.getAbsolutePath());
}
public List<MyFile> getChildFiles() {
return childFiles;
}
public void setChildFiles(List<MyFile> childFiles) {
this.childFiles = childFiles;
}
}
------------------------------------------------------------------------------
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class TestFile {
@Test
public void fileTest() {
MyFile myFile = new MyFile("D:\\迅雷下载");
getAllChildFiles(myFile);
printFile(myFile);
}
@Test
public void FileTest() {
MyFile srcFile = new MyFile("D:\\迅雷下载\\activiti-6.0.0");
MyFile targetFile = new MyFile("D:\\迅雷下载\\activiti-6.0.1");
try {
getAllChildFiles(srcFile);
File(srcFile,targetFile);
} catch (Exception e) {
e.printStackTrace();
}
}
public void getAllChildFiles(MyFile myFile) {
myFile.setWritable(true,true);
File[] files = myFile.listFiles();
List<MyFile> childFiles = new ArrayList<MyFile>();
for (File file : files) {
MyFile mf = new MyFile(file);
childFiles.add(mf);
if(mf.isDirectory()) {
getAllChildFiles(mf);
}
}
myFile.setChildFiles(childFiles);
}
public void printFile(MyFile myFile) {
System.out.println(myFile.getAbsolutePath());
System.out.println("====>"+myFile.getName());
List<MyFile> childFiles = myFile.getChildFiles();
if(childFiles != null && childFiles.size() > 0) {
for (MyFile mf : childFiles) {
printFile(mf);
}
}
}
public void File(MyFile srcFile,MyFile targetFile) throws Exception {
if(srcFile.isDirectory()) {
targetFile.mkdirs();
}else {
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
int len = 0;
while((len = fis.read(buffer)) != -1) {
fos.write(buffer,0,len);
}
fis.close();
fos.close();
}
List<MyFile> srcChildFiles = srcFile.getChildFiles();
List<MyFile> targetChidFiles = new ArrayList<MyFile>();
if(srcChildFiles != null && srcChildFiles.size() > 0) {
for (MyFile srcf : srcChildFiles) {
StringBuilder targFilePath = new StringBuilder(targetFile.getAbsolutePath());
targFilePath.append(MyFile.separator).append(srcf.getName());
System.out.println(targFilePath.toString());
MyFile targf = new MyFile(targFilePath.toString());
targetChidFiles.add(targf);
File(srcf,targf);
}
}
targetFile.setChildFiles(targetChidFiles);
}
}
希望能帮助到你,谢谢!!
E. java鎬庝箞鐢ㄦ祦璇诲彇涓涓鏂囦欢鐨勫唴瀹圭劧鍚庢坊鍔犲埌鍒鐨勬枃浠朵腑锛
FileInputStream fis = new FileInputStream("d:/a.txt");//浠巃.txt涓璇诲嚭x0dx0aFileOutputStream fos = new FileOutputStream("d:/b.txt");//鍐欐ā鏁e埌鏃﹀甫姘忚岃獕b.txt涓鍘籠x0dx0aBufferedReader reader = new BufferedReader(new InputStreamReader(fis));x0dx0aBufferedWriter write = new BufferedWriter(new OutputStreamWriter(fos));x0dx0aString temp;x0dx0awhile((temp = reader.readLine())!= null){//涓娆¤讳竴琛孿x0dx0awrite.write(temp);x0dx0a}x0dx0areader.close();x0dx0awrite.close();
F. java文件输出流,写到.txt文件,如何实现换行
1 实现的方式总共有3中, 1)原始的 \r\n 方式
2)BufferedWriter的newline()方法
3) System.getProperty()方法
下面使用代码逐一展示 , 写到.txt文件实现换行
2 使用java中的转义符"\r\n":
FileOutputStream fos=new FileOutputStream("c;\\11.txt");
String str="aaa";
str+="\r\n";
fos.write(str);
3 BufferedWriter的newline()方法:
FileOutputStream fos=new FileOutputStream("c;\\11.txt");
BufferedWriter bw=new BufferedWriter(fos);
bw.write("你好");
bw.newline(); //实现换行
4 System.getProperty()方法:
FileOutputStream fos=new FileOutputStream("c;\\11.txt");
String str = "aaa"+System.getProperty("line.separator");
fos.write(str);
G. JAVA涓鏂囦欢娴佸拰瀛楃︽祦鎿嶄綔瀹屾垚鍚庯紝濡備笉鍏抽棴锛屼細鍑虹幇浠涔堟儏鍐碉紵锛
瀛楃︽祦涓嶅叧闂灏烘壆姗樻槸娌″叧绯荤殑 鍨冨溇鏀剁己鎴栭泦鍒版渶鍚庝細鑷鍔ㄤ负浣犲洖鏀 鍙涓嶈繃瑕佸氬崰鐢ㄥ唴瀛樹竴浼氳屽凡 浣嗗傛灉鏂囦欢娴佸竷鍏抽棴锛堝挨鍏舵槸鐙鍗犳ā寮忎笅锛 鍒欎細鍑虹幇闄靛洟寮傚父 瀵瑰栫殑绋嬪簭涔熸墦涓嶅紑杩欎釜鏂囦欢鍥犳よ佽板緱鍏抽棴瀹