标签: java-io

可以将apache FileUtils.writeLines()附加到文件(如果存在)

公共文件FileUtils看起来很酷,我无法相信它们不能被附加到文件中.

File file = new File(path);
FileUtils.writeLines(file, printStats(new DateTime(), headerRequired));
Run Code Online (Sandbox Code Playgroud)

以上只是每次都替换文件的内容,我只想继续标记这些东西,就像这段代码一样.

fw = new FileWriter(file, true);
try{
    for(String line : printStats(new DateTime(), headerRequired)){
        fw.write(line + "\n");
    }
}
finally{ 
    fw.close();
}
Run Code Online (Sandbox Code Playgroud)

我搜索过javadoc但什么也没找到!我错过了什么?

java append apache-commons java-io

6
推荐指数
2
解决办法
2万
查看次数

InputStream的自定义实现

要将数据发送到我的FTP服务器上的文件,我需要创建一个自定义的InputStream实现,逐行读取数据库数据,将其转换为CSV并通过其read()方法发布它:从数据库中,我得到一个List<Application>对象数据.对于每个Application对象,我想在CSV文件中创建一行.

我的想法是在构造函数中加载所有数据,然后覆盖read方法.我是否需要覆盖所有InputStream的方法?我尝试谷歌搜索一些例子,但没有成功 - 你最终能给我一个链接吗?

java ftp inputstream java-io

6
推荐指数
3
解决办法
1万
查看次数

从Java.io.Reader获取有意义的文本

我正在编写一个程序,我正在使用其他公司的库从他们的网站下载一些报告.我想在将这些报告写入文件之前解析这些报告,因为如果它们符合某些条件,我想忽略它们.

问题是,他们的方法叫做download(),返回一个java.io.Reader.唯一可用的方法是

int read(char[] cbuf);
Run Code Online (Sandbox Code Playgroud)

打印出这个返回的数组会给我带来无意义的字符.我想能够识别我正在使用的字符集或将其转换为字节数组,但我无法弄清楚如何做到这一点.我试过了

//retrievedFile is my Reader object
char[] cbuf = new char[2048];
int numChars = retrievedFile.read(cbuf);
//I've tried other character sets, too
new String(cbuf).getBytes("UTF-8");
Run Code Online (Sandbox Code Playgroud)

而且我害怕向一个更有用的读者倾斜,因为我无法确定它是否会起作用.有什么建议?

编辑

当我说它打印出"毫无意义的人物"时,我并不是说它看起来像Jon Skeet给出的例子.这很难描述,因为我现在不在我的机器上,但我认为这是一个编码问题.字符似乎具有与报告外观类似的缩进和结构.我星期二回来后会立即尝试这些建议(我只是一名实习生,所以我没有费心设置远程帐户或任何东西).

java java-io

6
推荐指数
2
解决办法
1万
查看次数

附加对象OutputStream时的ClassCastException

我一直在尝试做一个需要可附加的ObjectOutputStream的小项目.我已经经历了几个解决方案,我发现这一点似乎首先解决了我的问题.但是在我的项目的进一步发展中,我开始遇到意外的异常.以下是我的课程.

public class PPAccount implements Serializable
{
    private Profile profile;
    private String email;
    private float accountBal;
    private boolean isActivated;
    private String activationCode;
    private ArrayList<Transaction> transactions;

    //a few functions   
}
public class PPRestrictedAccount extends PPAccount {
    private String parentEmail;
    private float withdrawLimit;

        //a few functions
}
public class PPBusinessAccount extends PPAccount {
    private ArrayList <PPRestrictedAccount> accountOperators;

        //a few functions
}
public class PPStudentAccount extends PPAccount {
    private String parentEmail;

        //a few functions
}
Run Code Online (Sandbox Code Playgroud)

我观察到的是,使用这个我已经覆盖了ObjectOutputStream并在我将对象附加到文件时使用它.但是如果我写的话会发生什么:

PPBusinessAccount首先,重复任意次数...然后写PPAccount …

java serialization classcastexception java-io

6
推荐指数
1
解决办法
8812
查看次数

DataOutputStream#writeBytes(String)vs BufferedWriter #write(String)

我想为我的报告创建一个HTML文件.可以使用创建报告中的内容BufferedWriter#write(String)

File f = new File("source.htm");
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
bw.write("Content");
Run Code Online (Sandbox Code Playgroud)

或者通过使用 DataOutputStream#writeBytes(String)

File f = new File("source.htm");
DataOutputStream dosReport = new DataOutputStream(new FileOutputStream(f)); 
dosReport.wrtiteBytes("Content");
Run Code Online (Sandbox Code Playgroud)

其中一个比另一个好吗?为什么会这样?

java string dataoutputstream bufferedwriter java-io

6
推荐指数
1
解决办法
7156
查看次数

File.delete()是否删除File对象的指针?

我的同事和我正在讨论该File.delete()方法如何在Java中工作.

在我们的代码中:

File outFile = new File("/dir/name.ext");
if(outFile.exists())
    outFile.delete();

FileInputStream inStream = new FileInputStream(outFile);

WriteFile.writeFile(inStream); // Writes the actual file
Run Code Online (Sandbox Code Playgroud)

writeFile出于安全原因,我不能包含此处的整个方法体,但在创建所需的数据库对象后,它将执行以下操作:

BufferedOutputStream out = null;

Object[] args = {"an_encrypted_data_clob_name_in_the_database"};
Class[] argTypes = {Class.forName("java.lang.String")};
Object result = WSCallHelper.jdbcCall(null, rs, "getCLOB", args, argTypes);
CLOB clob = (CLOB)result;
out = new BufferedOutputStream(clob.getAsciiOutputStream());

byte[] buffer = new byte[512];
int bytesRead = -1;

while((bytesRead = inStream.read(buffer)) > -1)
    out.write(buffer, 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)

我知道这是一个有点不清楚,但它的一般要点是,它创建AsciiOutputStreamClob(是的,它应该是一个Clob),并将其写入inStream是从以前的方法传递的对象.

他们确信这不会因为File.delete(); …

java file java-io

6
推荐指数
1
解决办法
968
查看次数

序列化:java.io.StreamCorruptedException:无效的流标题:0AACED00

我是一名学习我的文件IO技能的学生,我遇到了使用ObjectInputStream从文件中读取对象的问题.代码一直抛出一个InvalidClassException,我无法找到代码是如何在线投掷或通过反复试验.这是我的代码:

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class ReadFromFile {
String filename;
List<Object> os;

public ReadFromFile(String filename) {
    this.filename = filename;
    os = new ArrayList<>();
}

public Object[] readObject() {
    try {
        FileInputStream fis = new FileInputStream(filename);
        ObjectInputStream ois = new ObjectInputStream(fis);
        System.out.print("reading\n");
        while (true) {
            os.add(ois.readObject());
            System.out.print("read one\n");
        }
    } catch (EOFException e) {
        return os.toArray();
    } catch (FileNotFoundException e) {
        System.out.print("File not found\n");
        return os.toArray();
    } catch (ClassNotFoundException e) {
        System.out.print("Class not found\n");
        return os.toArray();
    } catch …
Run Code Online (Sandbox Code Playgroud)

java serialization java-io

6
推荐指数
1
解决办法
5993
查看次数

从文件夹中读取和删除文件

我正在尝试编写一个程序来从文件夹中读取每个文件,在读取文件中的内容后,该文件应该被删除。我可以编写程序来分别从文件夹中读取文件并从文件夹中删除文件,但无法将它们集成到一个程序中。

java java-io

5
推荐指数
1
解决办法
6963
查看次数

Path.toFile() 和 new File(pathString) 的不同行为

我在 Windows 中安装了网络驱动器(samba 服务器)。

我在该驱动器中有一个文件,我想在 Java 程序中读取该文件。

在我尝试使用以下方法读取文件之前:

Paths.get(basePath, fileName).toFile()
Run Code Online (Sandbox Code Playgroud)

但由于文件不存在而失败。文件就在那里,路径也很好。

然后我尝试了以下有效的代码:

String path = Paths.get(basePath, fileName).toAbsolutePath().toString()
File file = new File(path)
Run Code Online (Sandbox Code Playgroud)

两种方法有什么区别吗?是否需要任何安全设置?

更新

因此,在我使用第二部分(有效的部分)之后,我回到原来的部分(原样)来验证调试,这次它有效了。我用同一目录中的另一个文件尝试了它,但失败了。看起来很奇怪,但我会检查更多。

java file network-drive java-io java.nio.file

5
推荐指数
1
解决办法
1731
查看次数

使用 Java 创建引用链接

java.nio.Files.createSymbolicLink用于创建符号链接。我可以通过 SDK 创建引用链接(类似于cp --reflink=[WHEN]),还是需要执行到底层操作系统?

java java-io

5
推荐指数
1
解决办法
232
查看次数