首页编程java编程java fileoutputstream?java outputstreamwriter

java fileoutputstream?java outputstreamwriter

编程之家2026-05-27611次浏览

大家好,今天小编来为大家解答java fileoutputstream这个问题,java outputstreamwriter很多人还不知道,现在让我们一起来看看吧!

java fileoutputstream?java outputstreamwriter

Java中的FileInputStream,FileOutputStram,BufferedWriter

1、public class FileInputStream extends InputStream FileInputStream从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。FileInputStream用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。

2、public class FileOutputStream extends OutputStream文件输出流是用于将数据写入 File或 FileDescriptor的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。FileOutputStream用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter。 3、public class BufferedWriter extends Writer将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。

该类提供了 newLine()方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator定义。并非所有平台都使用新行符('\n')来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。通常 Writer将其输出立即发送到底层字符或字节流。除非要求提示输出,否则建议用 BufferedWriter包装所有其 write()操作可能开销很高的 Writer(如 FileWriters和 OutputStreamWriters)。例如,

PrintWriter out= new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

将缓冲 PrintWriter对文件的输出。如果没有缓冲,则每次调用 print()方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的。

java fileoutputstream?java outputstreamwriter

java OutputStream使用方法

outputStream是流的形式,具体可以表现为FileOutputStream的形式进行整行的写入。文件输出流是用于将数据写入 File或 FileDescriptor的输出流。(OutputSteam的子类)

可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:

OutputStreamWriter pw= null;//定义一个流。

pw= new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例。

pw.write("是要写入到记事本文件的内容");//将要写入文件的内容,可以多次writepw.close();//关闭流。

备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。

java fileoutputstream?java outputstreamwriter

扩展资料:

创建对象成功后,可以参照以下方法,对流进行写操作或者其他操作。

1.public final void write(byte[] w, int off, int len)throws IOException.

将指定字节数组中从偏移量off开始的len个字节写入此字节数组输出流。

2.Public final int write(byte [] b)throws IOException.

将指定的字节写入此字节数组输出流。

3.这些方法将指定的基本数据类型以字节的方式写入到输出流。

public final void writeBooolean()throws IOException.

public final void writeByte()throws IOException.

public final void writeShort()throws IOException.

public final void writeInt()throws IOException.

4.Public void flush()throws IOException.

刷新此输出流并强制写出所有缓冲的输出字节。

5.public final void writeBytes(String s) throws IOException.

将字符串以字节序列写入到底层的输出流,字符串中每个字符都按顺序写入,并丢弃其高八位。

参考资料来源:百度百科—OutputStream

有关java上传和File以及FileInputStream的区别

1:PostUploadInfo的js是页面<ai:fileupload标签自动加载的AIFileUpload.js里的方法

这里的ActionDocumentInfo.java注意与FtpUtilPro.java(它的一个upload方法有bug)的对比能

看出后者的bug.

从这个bug要看出File与FileInputStream的区别,File不属于流,它只是用来屏闭不同文件系统,用来统一

描述文件的实体BEAN,new File时给它传入文件名称或是路径,它就会去根据参数查找对应的文件属性然后封装

成实体。用来处理判断该路径是一个文件还是路径,文件或路径的权限,修改时间等等,路径的子路径list等等目录操作。

File不属于文件流,只能代表一个文件或是目录的路径名而已.

而FileInputStream关注的是文件的内容,是用来进行文件读写等操作的二进制流类。大多数情况下,构造FileInputStream

时传递一个File对象做参数,也可以直接传递String的文件路径。

这个容易混淆的问题在FTP时候很容易出现,因为客户端点击浏览本地文件后在上传时在服务器端如果直接把客户端的

文件名称拿到,然后用new File(“文件名称路径”),再用new InputStream(File)来上传到FTP的话,其实就是相当于服务器

端在服务器本地找File(“文件名称路径”),然后往FTP上传,这是错误的。我们希望的是上传客户端的文件,而不是

服务器端的文件,所以这里应该是直接用apache的FileItem.getInputStream的结果直接upload,如下:

InputStream fileIn= item.getInputStream();////如果直接写成这样new FileInputStream(filePath);就会出现在服务器本机找file上传的问题

//可以查看item.getInputStream()最后其实是从memoryOutputStream(内存里记忆的客户端文件流)来取流的句柄的。

以下是正确的实现

[code]

/**上传附件的时候调用

*@param request

*@param response

*@throws Exception

*/

public void doUpload(HttpServletRequest request, HttpServletResponse response) throws Exception{

CustomProperty cp= CustomProperty.getInstance();

try{

//调用apache控件上传文件,返回数组,第一个存放文件对象,第二个存放参数对象

Object obj[]= ApacheUploadTool.getUploadFileInfo(request);

List fileList=(List)obj[0];

Map paras=(Map)obj[1];

if(fileList== null|| fileList.size()==0){

cp.set("MESSAGE","找不到上传的文件");

return;

}

String aVirtualFileName="";

String newId="";

String newFileName="";

String aFileType="";

String docSize="";

String editMode= HttpUtil.getParameter(request,"edit_mode");

String objectId= HttpUtil.getParameter(request,"OBJECT_ID");

String busiType= HttpUtil.getParameter(request,"BUSI_TYPE");

//陈超调试修改添加的输出

// System.out.println("================"+editMode);

//保存附件信息

for(int i=0;i<fileList.size();i++){

FileItem item=(FileItem)fileList.get(i);

//获取文件流、文件名称

String fileName= fixFileName(item.getName());

IDocumentInfoSV idao= CommonService.getIDocumentInfoSV();

docSize= String.valueOf(item.getSize());

String codetype= String.valueOf(StaticValue.CFG_FTP_PATH_CODE);

String ftpPathName= BaseDataCodeAction.getCodeName(codetype, busiType);

if(null==ftpPathName||"".equals(ftpPathName)){

throw new Exception("没有该业务对应的FTP路径配置!");

}

//陈超调试的注释

// System.out.println("ftpPathName="+ftpPathName);

FtpUtil ftpUtil= new FtpUtil(ftpPathName);

// FtpUtilPro ftpUtil= new FtpUtilPro(ftpPathName);

//陈超添加的调试输出

// System.out.println("item=="+item);

// System.out.println("item.getInputStream()=="+item.getInputStream());

InputStream fileIn= item.getInputStream();//new FileInputStream(filePath);//如果直接写成这样就会出现在服务器本机找file上传的问题

//可以查看item.getInputStream()最后其实是从memoryOutputStream(内存里记忆的客户端文件流)来取流的句柄的。

//获取新的文件名,判断是否存在

IBODocumentInfoValue[] retValues= CommonService.getIDocumentInfoSV().queryDocumentInfoList(Long.parseLong(busiType), Long.parseLong(objectId));

for(int j=0;j<retValues.length;j++){

String docName= retValues[j].getDocumentName();

if(fileName.equals(docName)){

ExceptionUtil.throwBossException(83000015,new String[]{fileName});

}

}

newFileName= fileName;

if(editMode.equals("addNew")){

//陈超添加的调试输出

// ftpUtil.upload(fileName, fileIn,FtpUtil.BIN);

ftpUtil.upload(fileName, fileIn,FtpUtil.BIN);

}

else if(editMode.equals("modify")){

// System.out.println("================"+HttpUtil.getParameter(request,"DOCUMENT_ID"));

String oldId= HttpUtil.getParameter(request,"DOCUMENT_ID");

IBODocumentInfoValue acond= new BODocumentInfoBean();

acond.setDocumentId(Long.parseLong(oldId));

//陈超更改查询STATE为1

acond.setState(1);

IBODocumentInfoValue[] beanValues= idao.getDocumentInfo(acond,"",null);

if(null== beanValues|| beanValues.length==0){

throw new Exception("没有文档信息");

}

IBODocumentInfoValue beanValue= beanValues[0];

String oldFileName= beanValue.getDocumentName();

ftpUtil.upload(oldFileName, fileIn,FtpUtil.BIN);

}

if(i==0){

aVirtualFileName= newFileName;

}else{

aVirtualFileName= aVirtualFileName+","+ newFileName;

}

}

cp.set("IsOk","TRUE");

cp.set("MESSAGE","附件"+aVirtualFileName+"上传成功!");

cp.set("VIRTUAL_FILE_NAME_LIST", aVirtualFileName);

cp.set("DOCUMENT_ID", newId);

cp.set("DOCUMENT_SIZE", docSize);

} catch(Exception ex){

cp.set("IsOk","FALSE");

cp.set("MESSAGE",StaticValue.SYS_ERROR_INFO);

log.error(ex);

if(!ex.equals("")){

cp.set("MESSAGE",ExceptionUtil.getBossExceptionHint(ex));

}

}finally{

ApacheUploadTool.showFileUploadMsg(response,cp);

}

}

[/code]

附件是自己的ftp实现示例,和一些网上最简单的jsp上传的代码,也最能说明原理

好了,关于java fileoutputstream和java outputstreamwriter的问题到这里结束啦,希望可以解决您的问题哈!

少儿编程python,python到底值不值得学java版本手机下载 mcjava版手机版