Tag: java io

如何检查OutputStream是否已关闭

无论如何都要检查OutputStream是否关闭而不尝试写入并捕获IOException ? 例如,考虑以下设计方法: public boolean isStreamClosed(OutputStream out){ if( /* stream isn’t closed */){ return true; }else{ return false; } } 什么可以替换/* stream isn’t closed */与?

Java:在不锁定文件的情况下打开和读取文件

我需要能够用Java模仿’tail -f’。 我正在尝试读取一个日志文件,因为它是由另一个进程写的,但是当我打开文件来读取它时,它会锁定文件而另一个进程无法再写入它。 任何帮助将不胜感激! 这是我目前使用的代码: public void read(){ Scanner fp = null; try{ fp = new Scanner(new FileReader(this.filename)); fp.useDelimiter(“\n”); }catch(java.io.FileNotFoundException e){ System.out.println(“java.io.FileNotFoundException e”); } while(true){ if(fp.hasNext()){ this.parse(fp.next()); } } }

附加对象OutputStream时的ClassCastException

我一直在尝试做一个需要可附加的ObjectOutputStream的小项目。 我已经经历了几个解决方案,我发现这似乎首先解决了我的问题。 但是在我的项目的进一步发展中,我开始遇到意外的exception。 以下是我的课程。 public class PPAccount implements Serializable { private Profile profile; private String email; private float accountBal; private boolean isActivated; private String activationCode; private ArrayList transactions; //a few functions } public class PPRestrictedAccount extends PPAccount { private String parentEmail; private float withdrawLimit; //a few functions } public class PPBusinessAccount extends PPAccount { private […]

Java Scanner(文件)行为不当,但Scanner(FIleInputStream)始终使用相同的文件

我对Scanner有一种奇怪的行为。 当我使用Scanner(FileInputStream)构造函数时,它将与我正在使用的一组特定文件一起使用,但它不会与Scanner(File)构造函数一起使用。 案例1: Scanner(File) Scanner s = new Scanner(new File(“file”)); while(s.hasNextLine()) { System.out.println(s.nextLine()); } 结果:没有输出 案例2: Scanner(FileInputStream) Scanner s = new Scanner(new FileInputStream(new File(“file”))); while(s.hasNextLine()) { System.out.println(s.nextLine()); } 结果:文件内容输出到控制台。 输入文件是包含单个类的java文件。 我以编程方式(在Java中)仔细检查: 该文件存在, 是可读的, 并且具有非零文件大小。 在这种情况下, Scanner(File)通常适用于我,我不知道为什么现在没有。

将InputStream传递给OutputStream的最佳方法

我试图找到将InputStream传递给OutputStream的最佳方法。 我没有选择使用Apache IO之类的任何其他库。 这是片段和输出。 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.channels.FileChannel; public class Pipe { public static void main(String[] args) throws Exception { for(PipeTestCase testCase : testCases) { System.out.println(testCase.getApproach()); InputStream is = new FileInputStream(“D:\\in\\lft_.txt”); OutputStream os = new FileOutputStream(“D:\\in\\out.txt”); long start = System.currentTimeMillis(); testCase.pipe(is, os); long end = System.currentTimeMillis(); System.out.println(“Execution […]

Java的。 如何将文本附加到file.txt 的顶部

我需要通过Java添加文本到文本文件的开头。 例如,我有test.txt文件包含数据: Peter John Alice 我需要添加(到文件顶部): Jennifer 它应该是: Jennifer Peter John Alice 我有部分代码,但它将数据附加到文件末尾,我需要将文本添加到文件顶部: public static void irasymas(String irasymai){ try { File file = new File(“src/lt/test.txt”); if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); BufferedWriter bw = new BufferedWriter(fw); bw.write(irasymai+ “\r\n”); bw.close(); } catch (IOException e) { e.printStackTrace(); } } 我试过这个,但这只删除文件中的所有数据而不插入任何文本: public static […]

基础知识 – 使用Java读/写远程文件

我开始要求从远程Ubuntu机器上的目录中读取和写入文件。 首先,我编写了一个Java程序,可以从远程Windows机器(即LAN)上的共享文件夹中读取,写入文件。 在这里,这样的东西适用于我的(本地)Windows机器: File inputFile = new File( “\\172.17.89.76\EBook PDF”);/*ignore the syntax errors, the loc is just for the idea*/ 现在,当我考虑使用远程Ubuntu机器时,显然我不能做这样的事情,因为机器不在局域网上( 我不确定即使它在LAN上也能做到 !)。 因此,我尝试了以下方法: 使用Jsch,在两台机器之间建立信任(本地 – 远程Linux,远程Linux – 远程Linux)和使用sftp写入文件。(完成) 在两台机器上运行套接字 – 一个发送器,一个接收器(两个Java)(完成) 试图实现I / O相似的Windows(LAN)机器的代码片段(未实现) 在做所有这些的同时,我有很多疑问,阅读过很多post等等,我觉得我在基础知识上缺少一些东西: 实现IO需要某种信任构建(在两台机器之间)实用程序。 但最后,我想编写一个类似于代码片段的代码,无论机器,网络等。 Jsch解决方案和其他建议(在URL上使用http,ftp等)最终使用在远程计算机上运行的一些服务。 换句话说,并不是Java IO被用于访问远程文件系统 – 这对我没有吸引力,因为我依赖于服务而不是使用旧的I / O. Samba,SSHFS太突然出现在场景中,只会增加我的困惑。 但我不认为它们是我的目标的解决方案! 重申一下 , 我想使用Java I / O(普通或nio,两者都很好)编写代码,它只能读取,编写远程文件而不使用ftp,http等协议或套接字发送器 – 接收器模型的服务 […]

BufferedReader中的缓冲区大小是多少?

构造函数中缓冲区大小的含义是什么? BufferedReader(Reader in, int size) 正如我写的程序: import java.io.*; class bufferedReaderEx{ public static void main(String args[]){ InputStreamReader isr = null; BufferedReader br = null; try{ isr = new InputStreamReader(System.in); // System.out.println(“Write data: “); // int i = isr.read(); // System.out.println(“Data read is: ” + i); //Thus the InputStreamReader is useful for reading the character from the […]

如何为PrintWriter使用flush()

我有一些像这样的代码: PrintWriter pw = new PrintWriter(new BufferedReader(….)); for(int i=0; i<10; i++) { pw.println("a"); pw.flush();// flush each time when println()? } pw.close(); 每个’for’语句中的flush()是否必然? 我听说flush()会在调用close()时自动调用。 如果我写这样的代码: PrintWriter pw = new PrintWriter(new BufferedReader(….), true); 我不会再写pw.flush()了吗? 谢谢。

Process Builder waitFor()问题和打开文件限制

我inheritance了一些代码: Process p = new ProcessBuilder(“/bin/chmod”, “777”, path).start(); p.waitFor(); 基本上,存在一些古老且高度基于巫术的原因,用于将键/值对作为文件存储在磁盘上。 我真的不想进入它。 但是,我留下了一堆IOexception: Exception :Cannot run program “/bin/chmod”: java.io.IOException: error=24, Too many open files Message: Cannot run program “/bin/chmod”: java.io.IOException: error=24, Too many open files 一堆我的意思是在1万亿的领域 我感觉waitFor调用是阻止这些进程等待进程完成它并退出,但我认为chmod在文件实际关闭之前返回结果。 有谁知道这是否是这些例外的原因? 我的另一个倾向是数千个文件的打开和关闭在java端没有快速发生,并且还有其他事情发生,可能是某种forms的文件缓冲区在没有被清除时正在调用fw.close()。 我对java很新,这是一个让我难过的地狱奇怪的东西。 (很高兴应用程序仍以某种方式运行..吐出一个非常大的日志文件后) 任何人都可以想办法解决这个问题,清除缓冲区或增加文件打开限制,以便jvm可以跟上自己(假设这是问题)