javaIO FileOutputStream

FileOutputStream----字节输出流

常用API:

1.构造函数:

FileOutputStream(File file);//如果文件不存在则创建文件,如果文件存在则删除文件后重新创建文件。
FileOutputStream(File file, boolean append);//第二个参数如果为true的话在文件后面追加写入的内容。
FileOutputStream(String name);//和第1个一样
FileOutputStream(String name, boolean append)
FileOutputStream(FileDescriptor fdObj);//通过文件描述符创建文件输出字节流
         //文件描述符表示一个到文件系统中的某个实际文件的现有连接。

2.写文件方法:

void write(byte[] b);//把字节数组写入文件
void write(byte[] b, int off, int len);//把从字节数组b中的off下标开始,把字节写入文件,写入len个字节。
void write(int b);把int低八位写入文件,则写一个int(32位)要写四次: 每次右移八位.

3.其他方法:

void close() ;//关闭此文件输出流并释放与此流有关的所有系统资源。 
protected  void finalize();//清理到文件的连接,并确保在不再引用此文件输出流时调用此流的close方法。 
FileChannel getChannel();//返回与此文件输出流有关的唯一 FileChannel 对象。 
FileDescriptor getFD();//返回与此流有关的文件描述符。 

4.实例:

(1) 写个文件试试:写入顺序:高八位,次高八位,次低八位,低八位。

(2) 写入的文件乱码,利用FileInputStream读取并转换成int类型。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestFileOutputStreamWrite
{
    public static void main(String[] args) throws IOException
    {
        FileOutputStream fout=new FileOutputStream("testFileOutputStream.txt");
        int b=99999;
//        write(int b):写入b的低八位
        /*
        <<    :左移运算符,num << 1,相当于num乘以2
        >>    :右移运算符,num >> 1,相当于num除以2
        >>>    :无符号右移,忽略符号位,空位都以0补齐
         */
        writeInt(fout, b);
        fout.close();
        FileInputStream fin=new FileInputStream("testFileOutputStream.txt");
        int temp=readInt(fin);
        System.out.println(temp);
        fin.close();
    }
    public static void writeInt(FileOutputStream fout,int b) throws IOException
    {
            fout.write(b>>24);
            fout.write(b>>16);//写次高八位
            fout.write(b>>8);
            fout.write(b);//写入最低的八位
    }
    public static int readInt(FileInputStream fin) throws IOException
    {
        int temp=-1;
        byte[] buf=new byte[4];
        buf[0] = (byte)fin.read();//读取到的是前24位
        buf[1] = (byte)fin.read();
        buf[2] = (byte)fin.read();
        buf[3] = (byte)fin.read();//读取到最后一个字节
        temp= (int) ( ((buf[0] & 0xFF)<<24)  
                        |((buf[1] & 0xFF)<<16)  
                        |((buf[2] & 0xFF)<<8)  
                        |(buf[3] & 0xFF));  
        return temp;
    }
    
}

运行结果:

99999

可以看到文件已经正确写入成功,而且正确读取解析成int类型

使用FileInputStream和FileOutputStream实现文件的拷贝:

代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyFile
{
	public static void copy(File srcFile,File targetFile) throws IOException
	{
		if(!srcFile.exists())
		{
			throw new IllegalArgumentException( srcFile+"文件不存在");
		}
		if(!srcFile.isFile())
		{
			throw new IllegalArgumentException( srcFile+"不是文件");
		}
		FileInputStream in=new FileInputStream(srcFile);
		FileOutputStream out=new FileOutputStream(targetFile);
		byte[] buf=new byte[2*1024];
		int size=0;
		while((size=in.read(buf, 0, buf.length))!=-1)
		{
			out.write(buf, 0, size);
			out.flush();//刷新写入文件中去。
		}
		in.close();
		out.close();
		
	}
	public static void main(String[] args)
	{
		try
		{
			copy(new File("test.txt"), new File("test副本.txt"));
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

运行结果:

test.txt:

abcd中国小明

test副本.txt:

abcd涓浗灏忔槑

这里乱码是因为test.txt是utf-8编码的,这个java工程是gbk编码的,生成test副本.txt的时候默认编码是gbk,在eclipse中把test副本.txt的编码改成utf-8编码就可以正常显示了:

test副本.txt:

abcd中国小明

猜你喜欢

转载自blog.csdn.net/qq_21808961/article/details/80286564