Tag: io

扫描仪(System.in) – 如何取消/跳过输入等待

我只是想知道如何在单独的线程中控制控制台输入? 我有线程A和线程B和线程C; B和C他们都控制用户输入…事情是我不太确定如何在B和C线程之间切换scanIn.nextLine(); 因为B似乎在线程C可以中断B之前循环两次不必要的迭代:( 主线程: public class Main { private volatile ThreadGroup threadGroup=new ThreadGroup();//contains concurrent hash map… private volatile TaskManager taskManager=new TaskManager(threadGroup); private A a=new A(threadGroup); private B b=new B(threadGroup,taskManager); private C c=new C(threadGroup); Main() { b.start(); threadGroup.add(a,”A”); threadGroup.add(b,”B”); threadGroup.add(c,”C”); } public static void main(String args[]){new Main();} } TaskManager方法片段: … public synchronized void threadCMaybeCanBeStartedLater() { […]

如何判断是否已使用BufferedReader读入空行?

我正在阅读一个格式化的文本文件 word definiton word definition definition word definition 所以我需要继续尝试我是否在定义或不基于我何时达到那些emtpy行。 事实是, BufferedReader丢弃了\n字符,并以某种方式将该空行与String “”进行比较,并没有像我想象的那样进行注册。 我怎么能这样做呢。

从HDFS读取一个简单的Avro文件

我试图简单读取存储在HDFS中的Avro文件。 我发现当它在本地文件系统上时如何读取它…. FileReader reader = DataFileReader.openReader(new File(filename), new GenericDatumReader()); for (GenericRecord datum : fileReader) { String value = datum.get(1).toString(); System.out.println(“value = ” value); } reader.close(); 但是我的文件是HDFS。 我不能给openReader一个Path或一个FSDataInputStream。 我怎样才能简单地读取HDFS中的Avro文件? 编辑:我通过创建实现SeekableInput的自定义类(SeekableHadoopInput)来实现此目的。 我从github上的“Ganglion”中“偷”了这个。 似乎仍然会有一个Hadoop / Avro集成路径。 谢谢

PipedInputStream – 如何避免“java.io.IOException:Pipe broken”

我有两个主题。 其中一个写入PipedOutputStream,另一个从相应的PipedInputStream读取。 背景是一个线程正在从远程服务器下载一些数据,并通过管道流将其多路复用到其他几个线程。 问题是有时(特别是在下载大型(> 50Mb)文件时)我得到java.io.IOException:试图从PipedInputStream读取时管道坏了 。 Javadoc说, A pipe is said to be broken if a thread that was providing data bytes to the connected piped output stream is no longer alive. 确实,我的写作线程在将所有数据写入PipedOutputStream之后真的死了。 有解决方案? 如何防止PipedInputStream抛出此exception? 我希望能够读取写入PipedOutputStream的所有数据,即使编写线程完成了他的工作。 ( 如果有人知道如何继续写线程直到所有数据都被读取,这个解决方案也是可以接受的 )。

CharBuffer与char

有没有理由更喜欢CharBuffer到char[] ,如下所示: CharBuffer buf = CharBuffer.allocate(DEFAULT_BUFFER_SIZE); while( in.read(buf) >= 0 ) { out.append( buf.flip() ); buf.clear(); } 与 char[] buf = new char[DEFAULT_BUFFER_SIZE]; int n; while( (n = in.read(buf)) >= 0 ) { out.write( buf, 0, n ); } (在哪里Reader和Writer )?

没有System.out怎么办,在控制台上打印?

我最近在接受采访时遇到了一个问题。 问题表示为 – >假设您无法访问Jdk API中的System类,也无法使用ECHO,您在JRE 5环境中,如何在控制台上打印任何内容? 问题真正开始于 – 为什么Java给了我们PrintStream对象System.out ??为什么它是最终的? 没有任何其他方法可以在控制台上打印任何东西。

写入文件但只保存最后一行

我正在尝试复制文本文件,但是当代码完成执行时,我只有文件中的最后一行文本。 显然scanLine()会覆盖相同的行,但我无法解决这个问题。 有任何想法吗? do{ try{ FileWriter name = new FileWriter(“/home/fok/Desktop/out”); BufferedWriter out = new BufferedWriter(name); a=x.nextLine();scanner x grabs next line and sets it string a out.write(a);//writes a to file out.close();//closees file } catch (IOException ioe){ System.out.println(“file writer error”); } } while(x.hasNext());

exception处理,创建日志并在JAVA中继续程序

我正在JAVA中设计一个程序,它可以捕获大约10次迭代的结果。 在这些迭代结束时,必须将所有结果写入日志文件。 如果发生任何exception,那么它应该写在我的文本文件上,其次程序不能停止,它必须继续,直到最后一次迭代完成… 也就是说 – 如果在任何迭代的任何部分发生某些错误, 程序就不能在这里停止 。 必须在我的结果中通过错误名称提及错误,并且必须继续并更新我的日志文件。 我的代码到现在有点冗长…使用try-catch,try块正在进行我的计算并编写我的文本文件,但我需要如果发生一些exception,我的程序一定不能停止,并且必须在我的日志中更新该exception文件。

找不到合适的写入方法

我试图将以前创建的数组写入文件。 这是我得到的错误,我不知道如何解决它。 Zoo.java:341: error: no suitable method found for write(Animals)outputWriter.write(animals[p]); ^ method Writer.write(int) is not applicable (argument mismatch; Animals cannot be converted to int) method Writer.write(char[]) is not applicable (argument mismatch; Animals cannot be converted to char[]) method Writer.write(String) is not applicable (argument mismatch; Animals cannot be converted to String) method BufferedWriter.write(int) is not applicable […]

尝试从输入流中检索文本时,应用程序挂起

情况 我一直在创建一个程序来在局域网中的两台计算机之间交换消息。 一台计算机将自己标识为服务器而另一台计算机标识为客户端。 启动时,如果用户希望作为客户端连接到该计算机,则必须输入另一台计算机的主机和端口。 它的工作原理设置非常基础:您键入消息,按Enter键,它会显示在您自己的屏幕上。 之后,您的对话伙伴必须单击按钮才能检索最新消息,并且它应显示在他的屏幕上。 这种情况一直持续到有人离开。 问题 程序正确启动并询问连接设置。 之后,我在两台计算机上启动连接,事情似乎很顺利(建立连接后,标签会显示您的状态,例如客户端或服务器,是(1))。 当我输入消息并发送消息时,事情继续正常,输出将被写入发送者的屏幕,并且不会发生意外行为。 当我想在另一台计算机上检索消息时,该程序完全冻结。 GUI中没有对象可单击,也不显示输出。 码 假设连接已正确建立(参见(1)),我将概述下面发送消息的过程,同时省略非必要部分。 GuiApplication.java private void sendMessage() { connection.sendMessage(message); showMessage(message); } Connection.java public void sendMessage(String message) { if (isClient()) { client.sendMessage(message); } else if (isServer()) { server.sendMessage(message); } } Client.java public void sendMessage(String message) { outbound = new PrintWriter(socket.getOutputStream(), true); // Defined outside […]