草庐IT

java - 为什么 InputStreamReader 在从 jar 读取时抛出 NPE?

我正在尝试使用流遍历已知目录中的类文件。最终目标是获取特定包中存在的所有类的类名,然后在运行时加载类并使用反射获取所有静态常量的名称和值。当我在我的机器上从源代码运行程序时,这是有效的,但是当我将它作为jar运行时,BufferedReader从ready()和readLine中抛出一个NPE()。这是代码(为简洁起见省略了错误处理和最佳实践):privatevoidprintClassNamesInPackage(finalStringstrPackage)throwsException{//ThereturnedimplementationofInputStreamseemstob

java - 使用内存中的文件系统模拟 java.io.File。也许吉姆斯

我正在使用与java.io.File实例一起使用的第三方库。我想在我的单元测试中使用这个库,但我不希望它在磁盘上创建文件。我的第一个想法是使用JimFs模拟文件系统,但它不支持java.io.File。我的第二个想法是使用一些模拟框架模拟File并将调用委托(delegate)给JimFs,但不知道这是否可行。是否有一些使用虚拟java.io.File的解决方案? 最佳答案 您可以使用JUnitTemporaryFolder规则轻松创建在测试方法完成后删除的临时文件。 关于java-使用

java - 不同系统的不同结果

当我在家用PC上使用这段代码时,输​​出为“output1”,但是当我在办公室PC上使用相同的代码时,会给出不同的输出,如“output2”。代码:System.out.println(System.getProperty("java.io.tmpdir"));输出1:C:\Users\admin\AppData\Local\Temp\输出2:C:\Users\admin\AppData\Local\Temp为什么输出有差异? 最佳答案 java从执行中给出的这些输出System.out.println(System.getProp

Java exec方法,如何正确处理流

从Java生成和使用外部进程流(IO)的正确方法是什么?据我所知,由于缓冲区大小可能有限,Java端输入流(进程输出)应该在与生成进程输入并行的线程中使用。但我不确定我是否最终需要与那些消费者线程同步,或者仅仅使用waitFor方法等待进程退出是否足够,以确保所有进程输出真的被消耗了吗?I.E是否有可能,即使进程退出(关闭它的输出流),流的java端仍然有未读数据?waitFor实际上是如何知道进程何时完成的?对于有问题的进程,EOF(关闭其输入流的Java端)发出退出信号。我目前处理流的解决方案如下publicclassApplication{privatestaticfinalSt

java - 在 Java 中重定向子进程的 I/O(为什么 ProcessBuilder.inheritIO() 不起作用?)

我正在通过以下方式启动流程。try{finalProcessmvnProcess=newProcessBuilder("cmd","/c","mvn","--version").directory(newFile(System.getProperty("user.dir"))).inheritIO().start();System.exit(mvnProcess.waitFor());}catch(finalIOExceptionex){System.err.format(IO_EXCEPTION);System.exit(1);}catch(finalInterruptedExcep

java - PrintWriter vs PrintStream vs OutputStreamWriter 时间成本

如您所知,我们在Java中有多种工具可用于将数据写入流。在此示例代码中,我按运行时间对它们进行了比较。有人可以准确解释吗?谢谢。这是代码:importjava.io.FileOutputStream;importjava.io.OutputStreamWriter;importjava.io.PrintStream;importjava.io.PrintWriter;publicclassIOtests{publicstaticvoidmain(String[]args)throwsException{char[]chars=newchar[100];byte[]bytes=newby

java - Java 中的可中断网络 I/O

在Java1.4+中,有3种方法可以中断在套接字I/O上阻塞的流:如果套接字是使用常规java.net.Socket(InetAddress,int)创建的构造函数,我可以closeit从一个单独的线程。结果,SocketException被扔到阻塞的线程中。如果套接字是使用SocketChannel.open(...)创建的.socket()(非阻塞I/O)——同样,可以从一个单独的线程中关闭它,但现在在阻塞的线程中抛出一个不同的异常(AsynchronousCloseException)。此外,在使用非阻塞I/O的情况下,可以使用ClosedByInterruptException

java - 为什么刚创建时需要刷新输出缓冲区?

在下面的场景中ObjectOutputStreamoutput=newObjectOutputStream(socket.getOutputStream());output.flush();//Dostuffwithit为什么在初始创建后总是需要刷新缓冲区?我经常看到这种情况,但我真的不明白什么必须冲洗掉。我希望新创建的变量为空,除非另有说明。有点像买了一个垃圾桶,发现里面有一小堆垃圾。 最佳答案 在超过15年的专业水平的Java编写中,我从未遇到过在写入流之前刷新流的需要。刷新操作根本不会执行任何操作,因为没有要刷新的内容。你想在

javax.xml.ws.WebServiceException : java. io.IOException:写入服务器 Tomcat 8 时出错

我们最近将在JRE1.7.0_17/Tomcat7.0.39上运行的JAX-WS网络服务的技术堆栈更新为JRE1.8.0_66/Tomcat8.0.28。Web应用程序在WindowsServer2012上运行。Web服务使用JAX-WS的Metro实现。客户端使用JRE7和内置于JRE中的JAX-WS客户端API在各种Windows版本上运行。网络服务用于将文件从客户端机器上传到网络服务,网络服务将文件保存在文档管理系统中。该实现在Java7/Tomcat7下运行得非常完美,但我们遇到了在Java8/Tomcat8服务器端运行更大负载(2MB或更大)的问题。来自客户端的堆栈跟踪是:1

java - IWAB0399E 从 WSDL 生成 Java 时出错 : java. io.IOException:错误:缺少 <soap:fault> 元素 inFault

我有一个供内部使用的WCF4.0服务。另一个团队正尝试在Java中使用它。IWAB0399EErroringeneratingJavafromWSDL:java.io.IOException:ERROR:MissingelementinFault"PasswordReuseFaultFault"...一个消息来源表明它可能是一个Soap1.1vs.Soap1.2issue确实是我的WCF生成了WSDL注意而不是预期的我很确定这就是问题的原因。如何让WCF生成soap1.1WSDL?或我应该告诉Java团队做什么,以便他们的工具能够理解更新的协议(protocol)?编辑:我发现basi