-
Java 创建文件输出流的时候报错
2017-04-02 15:34:24问题:在项目中我们用Apache的Mahout进行协同...但是在创建文件输出流的时候却捕获到了一个异常- -·package MicrosoftImageCup;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fil问题:
在项目中我们用Apache的Mahout进行协同过滤的推荐,需要打开一个csv文件并将数据库里的用户数据存入其中,从而进行书籍推荐。但是在创建文件输出流的时候却捕获到了一个异常- -·
package MicrosoftImageCup; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.List; public class CSVUtils { /** * 导入 * * @param file csv文件(路径+文件名),csv文件不存在会自动创建 * @param dataList 数据 * @return */ public static boolean importCsv(File file, List<String> dataList){ boolean isSucess=false; FileOutputStream out=null; OutputStreamWriter osw=null; BufferedWriter bw=null; try { out = new FileOutputStream(file); osw = new OutputStreamWriter(out); bw =new BufferedWriter(osw); if(dataList!=null && !dataList.isEmpty()){ for(String data : dataList){ bw.append(data).append("\r"); } } isSucess=true; } catch (Exception e) { isSucess=false; }finally{ if(bw!=null){ try { bw.close(); bw=null; } catch (IOException e) { e.printStackTrace(); } } if(osw!=null){ try { osw.close(); osw=null; } catch (IOException e) { e.printStackTrace(); } } if(out!=null){ try { out.close(); out=null; } catch (IOException e) { e.printStackTrace(); } } } return isSucess; } /** * 导出 * * @param file csv文件(路径+文件) * @return */ public static List<String> exportCsv(File file){ List<String> dataList=new ArrayList<String>(); BufferedReader br=null; try { br = new BufferedReader(new FileReader(file)); String line = ""; while ((line = br.readLine()) != null) { dataList.add(line); } }catch (Exception e) { }finally{ if(br!=null){ try { br.close(); br=null; } catch (IOException e) { e.printStackTrace(); } } } return dataList; } }
在
out = new FileOutputStream(file);
这句的时候报了异常
原因:
原来是我在运行的时候,那个CSV文件是在程序外大开着的。。。。
= = 所以才报了错。。。 -
文件输出流:FileOutputStream
2020-03-29 11:11:18OutputStream有很多子类,我们从最简单的一个子类开始。 java.io.FileOutputStream类是文件输出流,用于将数据写出到文件。...public FileOutputStream(String name): 创建文件输出流以指定的名称...OutputStream
有很多子类,我们从最简单的一个子类开始。java.io.FileOutputStream
类是文件输出流,用于将数据写出到文件。1. 构造方法
public FileOutputStream(File file)
:创建文件输出流以写入由指定的 File对象表示的文件。public FileOutputStream(String name)
: 创建文件输出流以指定的名称写入文件。
参数
写入数据的目的地
String name
:是一个文件的路径File file
:是一个文件
构造方法的作用
- 创建一个``FileOutputStream`对象
- 会根据构造方法中传递的文件/文件路径,创建一个空的文件
- 会把
FileOutputStream
对象指向创建好的文件
写入数据的原理(内存–>硬盘)
java程序–>JVM(java虚拟机)–>OS(操作系统)–>OS调用写数据的方法–>把数据写入到文件中
2. 使用步骤 【重点】
- 创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
- 调用FileOutputStream对象中的方法write,把数据写入到文件中
- 释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提供程序的效率)
注意
当你创建一个流对象时,必须传入一个文件路径。
- 该路径下,如果没有这个文件,会创建该文件。
- 如果有这个文件,会清空这个文件的数据。
构造举例,代码如下:
public class FileOutputStreamConstructor throws IOException { public static void main(String[] args) { // 使用File对象创建流对象 File file = new File("a.txt"); FileOutputStream fos = new FileOutputStream(file); // 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("b.txt"); } }
3. 常用方法
1. 写出字节数据
write(int b)
方法,每次可以写出一个字节数据
注意
- 虽然参数为int类型四个字节,但是只会保留一个字节的信息写出。
- 流操作完毕后,必须调用close方法释放系统资源
代码演示:
public class FOSWrite { public static void main(String[] args) throws IOException { // 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("fos.txt"); // 写出数据 100 fos.write(97); // 写出第1个字节 fos.write(98); // 写出第2个字节 fos.write(99); // 写出第3个字节 // 关闭资源 fos.close(); } }
结果:
abc
2. 写出字节数组
public void write(byte[] b)
:将`` b.length`字节从指定的字节数组写入此输出流。
一次写多个字节
- 如果写的第一个字节是正数(0-127),那么显示的时候会查询ASCII表
- 如果写的第一个字节是负数,那第一个字节会和第二个字节,两个字节组成一个中文显示,查询系统默认码表(GBK)
代码演示:
public class FOSWrite { public static void main(String[] args) throws IOException { // 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("fos.txt"); // 字符串转换为字节数组 byte[] b = "你好".getBytes(); // 写出字节数组数据 fos.write(b); byte[] bytes1 = {-65,-66,-67,68,69}; // 烤紻E fos.write(bytes1); // 关闭资源 fos.close(); } }
3. 写出指定长度字节数组和写入字符的方法
-
public void write(byte[] b, int off, int len)
:把字节数组的一部分写入到文件中int off
:数组的开始索引int len
:写几个字节 -
byte[] getBytes()
:(使用String类中的方法)把字符串转换为字节数组。
代码演示:
public class FOSWrite { public static void main(String[] args) throws IOException { // 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("fos.txt"); // 字符串转换为字节数组 byte[] b = "abcde".getBytes(); // 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。 fos.write(b,2,2); byte[] bytes2 = "你好".getBytes(); /* System.out.println(bytes2); // [B@50cbc42f System.out.println(Arrays.toString(bytes2)); // [-28, -67, -96, -27, -91, -67] UTF-8:三个字节是一个中文 */ fos.write(bytes2); //释放资源 fos.close(); } }
结果:
cd烤紻E
4. 数据追加续写
经过以上的演示,每次程序运行,创建输出流对象,都会清空目标文件中的数据。如何保留目标文件中数据,还能继续添加新数据呢?
构造方法
public FileOutputStream(File file, boolean append)
: 创建文件输出流以写入由指定的 File对象表示的文件。public FileOutputStream(String name, boolean append)
: 创建文件输出流以指定的名称写入文件。
这两个构造方法,参数中都需要传入一个boolean类型的值,
true
表示追加数据,false
表示清空原有数据。这样创建的输出流对象,就可以指定是否追加续写了参数
String name,File file
:写入数据的目的地boolean append
:追加写开关true
:创建对象不会覆盖源文件,继续在文件的末尾追加写数据false
:创建一个新文件,覆盖源文件
代码演示:
public class FOSWrite { public static void main(String[] args) throws IOException { // 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("fos.txt",true); // 字符串转换为字节数组 byte[] b = "abcde".getBytes(); // 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。 fos.write(b); // 关闭资源 fos.close(); } }
结果:
文件操作前:cd 文件操作后:cdabcde
5. 写出换行
回车符
\r
和换行符\n
- 回车符:回到一行的开头(return)。
- 换行符:下一行(newline)。
系统中的换行
- Windows系统里,每行结尾是
回车+换行
,即\r\n
; - Unix系统里,每行结尾只有
换行
,即\n
; - Mac系统里,每行结尾是
回车
,即\r
。从 Mac OS X开始与Linux统一。
代码演示:
public class FOSWrite { public static void main(String[] args) throws IOException { // 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("fos.txt"); // 定义字节数组 byte[] words = {97,98,99,100,101}; // 遍历数组 for (int i = 0; i < words.length; i++) { // 写出一个字节 fos.write(words[i]); // 写出一个换行, 换行符号转成数组写出 fos.write("\r\n".getBytes()); } // 关闭资源 fos.close(); } }
结果:
a b c d e
-
JAVA文件输出流FileOutputStream
2020-11-03 11:40:53JAVA文件输入流FileOutputStream 父类 输入流 输出流 字节流 字节输入流InputStream 字节输出流OutputStream 字符流 ... * * `public FileOutputStream(File file)`:创建文件输出流以写入JAVA文件输出流FileOutputStream
父类
输入流 输出流 字节流 字节输入流
InputStream字节输出流
OutputStream字符流 字符输入流
Reader字符输出流
Writerpackage JAVA_Test7; import java.io.FileOutputStream; import java.io.IOException; /** * * `public FileOutputStream(File file)`:创建文件输出流以写入由指定的 File对象表示的文件。 * * `public FileOutputStream(String name)`: 创建文件输出流以指定的名称写入文件。 * FileOutputStream构造函数会自动创建一个新文件a.text并写入字节数据 * */ public class OutPutStream { public static void main(String[] args) throws IOException { FileOutputStream fo = new FileOutputStream("F:\\Users\\xm\\下载\\文件\\day09_字节流、字符流\\a.text"); fo.write(97); fo.write(98); fo.write(99); byte [] bytes = "你好".getBytes(); fo.write(bytes); } }
FileOutputStream默认创建一个新文件覆盖可能存在的同名文件,那么如何不覆盖追加写入数据?
构造方法FileOutputStream(File file, boolean append)
FileOutputStream(String name, boolean append)第二个参数改为true即可
FileOutputStream fo = new FileOutputStream("F:\\Users\\xm\\下载\\文件\\day09_字节流、字符流\\a.text",true);
-
java 文件输出流_Java 文件输出流
2021-03-05 22:05:42Java IO教程 - Java文件输出流创建输出流要写入文件,我们需要创建一个FileOutputStream类的对象,它将表示输出流。// Create a file output streamString destFile = "test.txt";FileOutputStream fos = new ...Java IO教程 - Java文件输出流
创建输出流
要写入文件,我们需要创建一个FileOutputStream类的对象,它将表示输出流。// Create a file output stream
String destFile = "test.txt";
FileOutputStream fos = new FileOutputStream(destFile);
当写入文件时,如果文件不存在,Java会尝试创建文件。我们必须准备好处理这个异常,将代码放在try-catch块中,如下所示:try {
FileOutputStream fos = new FileOutputStream(srcFile);
}catch (FileNotFoundException e){
// Error handling code goes here
}
如果文件包含数据,数据将被擦除。为了保留现有数据并将新数据附加到文件,我们需要使用FileOutputStream类的另一个构造函数,它接受一个布尔标志,用于将新数据附加到文件。
要将数据附加到文件,请在第二个参数中传递true,使用以下代码。FileOutputStream fos = new FileOutputStream(destFile, true);
写数据
FileOutputStream类有一个重载的write()方法将数据写入文件。我们可以使用不同版本的方法一次写入一个字节或多个字节。
通常,我们使用FileOutputStream写入二进制数据。
要向输出流中写入诸如“Hello"的字符串,请将字符串转换为字节。
String类有一个getBytes()方法,该方法返回表示字符串的字节数组。我们给FileOutputStream写一个字符串如下:String text = "Hello";
byte[] textBytes = text.getBytes();
fos.write(textBytes);
要插入一个新行,使用line.separator系统变量如下。String lineSeparator = System.getProperty("line.separator");
fos.write(lineSeparator.getBytes());
我们需要使用flush()方法刷新输出流。fos.flush();
刷新输出流指示如果任何写入的字节被缓冲,则它们可以被写入数据宿。
关闭输出流类似于关闭输入流。我们需要使用close()方法关闭输出流。// Close the output stream
fos.close();
close()方法可能抛出一个IOException异常。如果我们希望自动关闭tit,请使用try-with-resources创建输出流。
以下代码显示如何将字节写入文件输出流。import java.io.File;
import java.io.FileOutputStream;
public class Main {
public static void main(String[] args) {
String destFile = "luci2.txt";
// Get the line separator for the current platform String lineSeparator = System.getProperty("line.separator");
String line1 = "test";
String line2 = "test1";
String line3 = "test2";
String line4 = "test3";
try (FileOutputStream fos = new FileOutputStream(destFile)) {
fos.write(line1.getBytes());
fos.write(lineSeparator.getBytes());
fos.write(line2.getBytes());
fos.write(lineSeparator.getBytes());
fos.write(line3.getBytes());
fos.write(lineSeparator.getBytes());
fos.write(line4.getBytes());
// Flush the written bytes to the file fos.flush();
System.out.println("Text has been written to "
+ (new File(destFile)).getAbsolutePath());
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
上面的代码生成以下结果。
-
java配置文件的输出流_使用Java输出字符流FileWriter创建配置文件
2021-02-26 16:21:08前面介绍了字节输入流FileInputStream和字节输出流FileOutputStream。本节介绍字节输入流FileReader和字节输出流FileWriter的使用方法。编程案例在java编程中,经常使用配置文件存储程序的一些配置属性,如数据库... -
FileOutputStream文件字节输出流
2020-08-19 14:37:27java.io.FileOutputStream:文件字节输出流,负责写。内存--->硬盘 FileOutputStream实现了向文件中写入byte数据... 创建文件输出流以写入由指定的File对象表示的文件。 publicFileOutputStream(Fil... -
数据输入输出流与文件输入输出流类的小程序
2018-07-06 22:20:14程序功能:将整型数据和字符串对象通过数据输出流写到文件中。将文件中的整型数据和字符串对象通过数据输出流读出,并在屏幕上显示文件中的内容。...{ //添加方式创建文件输出流 FileOutputStream fout = new FileOu... -
输出流创建txt文件
2019-11-07 20:12:01问题:利用输入流在指定路径下创建file.txt,并且写入字符“文件创建成功!”。然后用记事本打开,查看写入是否正确。 效果: 代码: package _Stream; import java.io.File; import java.io.FileWriter; ... -
io 流 创建文件夹并创建文件输出xml
2013-03-22 11:49:04/** * @Title: outXmlFile... * @Description: TODO(生成一个xml文件,保存到本地) * @param @throws FileNotFoundException 设定文件 * @return void 返回类型 * @throws * @author 王明雨 * -
java用输入流创建数据文件_Java 输入输出流
2021-03-01 09:59:51读取数据的对象叫做输入流,写入数据的对象叫做输出流。2. 在Java中,字符是如何在内存中表示的,是如何在文本文件中表示的?在内存中用Unicode编码来表示字符,在文本文件中用一种指定的编码方案来表示字符,如果... -
java 字节流输出到文件类型_java字节流,文件输出流FileOutputStream类介绍
2021-02-26 17:10:29下面要给大家介绍的是和文件输出流FileOutputStream类相关的内容,对于FileOutputStream类你了解多少呢?通过下文来了解一下吧。FileOutputStream类继承自OutputStream类,重写和实现了父类中的所有方法,... -
Android文件输出流和输入流操作
2015-01-18 14:38:59FileOutPutStream:文件输出流 ByteArrayOutputStream:缓存输出流 二、文件对象的创建方法 1、获取当前应用文件的文件输入流对象、文件输出流对象 分别是:context.openFileInput(filena -
java用输入流创建数据文件_Java实现文件写入——输入输出流(IO流)
2021-02-26 20:33:11流是一组有序的数据序列,根据操作类型,分为输入流和输出流。程序从输入流读取数据,向输出流写入数据。Java是面向对象的程序语言,每一个数据流都是一个对象,它们提供了各种支持“读入”与“写入”操作的流类。... -
文件输出流
2015-09-21 23:39:12import java.io.*; public class ReadFile { public static void main(String[] ... //读取c:\logs.txt文件信息 readFile(); } private static void readFile() { //1 创建File对象 File f = -
java用输入流创建数据文件_java开发知识IO知识之输入输出流以及文件
2021-03-01 09:59:32java开发知识IO知识之输入输出流以及文件一丶流概述流十一组有序的数据序列.根据操作的类型,可以分为输入流跟输出流两种. IO(input/output)输入/输出流提供了一条通道程序.可以使用这条通道把源的字节序列送到目的地... -
I/O相关输入输出流,使用File对象创建文件
2020-12-30 10:56:31创建I/O相关输入输出流,使用File对象在磁盘C中创建一个File文件夹。再在该文件夹下创建一个test.txt文件。从键盘输入多行英文句子,将输入的句子存储在该文件中。 需提前在C盘根目录下创建javatest文件夹。 import ... -
Java100-009:I/O流:利用文件输入流,文件输出流,字节数组输入流,字节数组输出流,来实现图片的拷贝
2019-01-01 23:42:48* I/O流:利用文件输入流,文件输出流,字节数组输入流,字节数组输出流,来实现图片的拷贝 * * @author Administrator * */ import java.io.*; //I/O流的常规操作步骤:创建源,选择流,操作(读与写),... -
输出流创建文件无法写入数据
2013-04-08 16:55:23我想创建一个文件然后写入数据但是只创建了文件,写入的内容不显示这是怎么回事?下面是代码 public void writeFile(){ try{ FileWriter f=new FileWriter("D:/date.txt"); BufferedWriter buf=new ... -
java输入流,输出流,read,write,创建文件,复制文件,缓冲区
2020-06-02 17:07:51字符流以字符为单位进行读写,对应的类以Read或Writer结尾(文本文件) 字节流 以字节(byte)为基本传输单位,用于对二进制数据进行读写 以OutputStream或InputStream结尾的(用于多类型文件) read int read():... -
java新建配置文件_使用Java输出字符流FileWriter创建配置文件
2021-02-25 18:36:00前面介绍了字节输入流FileInputStream和字节输出流FileOutputStream。本节介绍字节输入流FileReader和字节输出流FileWriter的使用方法。编程案例在java编程中,经常使用配置文件存储程序的一些配置属性,如数据库... -
java输出流文件_Java基础之文件的输入输出流操作
2021-02-12 13:11:32在介绍输入输出流之前,首先需要了解如何创建文件,创建文件夹以及遍历文件夹等各种操作,这里面不在一一介绍,主要介绍的是文件的输入输出流操作。在起初学习文件操作之前,总是喜欢将输入输出弄混淆,后来通过看... -
java 文件输入 输出流_java文件输入输出流学习笔记
2021-03-06 04:19:24--java创建文件File file=new File("java.txt");//此时java工作空间根目录下不一定存在java.txt//判断是否存在不存在调用File类的createNewFile方法创建java.txtFile files=new File("E:\\war3");if(!file.exists())... -
【C++进阶】C++创建文件/屏幕输出流类(将信息同时输出到文件和屏幕)
2021-01-16 16:20:57在软件的调试技术中,很重要的一个技术是将软件运行过程中的一些信息写入到“日志文件”中。但是同时还要将信息显示到屏幕上,以方便程序员实时查看这些信息。 最简单的一种办法是这样的: std::ofstream output(... -
文件字节输出流FileOutputStream
2020-06-14 19:34:472、创建指向该目的的输出流 3、将数据通过流写入 4、关闭输出流 如果对写入的需求比较简单,就使用OutputStream类的子类FileOutputStream类就可以了。需要注意的是,如果写入到该文件的时候,如果该 -
Java 文件字节输出流
2018-06-19 11:57:49关闭输出流如果对文件的写入需求比较简单,那么可以使用FileOutputStream类(文件字节输出流),它是OutputStream类的子类(亿字节为单位向文件类写入内容)。该类的实例方法是从OutputStream类继承来的。可以使用... -
IO流 文件字符输出流
2019-09-04 22:26:11package io02; import java.io.File; import java.io.FileWriter; import java.io....四个步骤:分段读取 文件字符输出流 1.创建源 2.选择流 3.建议 4.释放资源 @author */ public class TestIO07 { pub...