你们如何测试一个空的InputStream?我知道InputStream旨在使用远程资源,因此在您实际读取它之前,您无法知道它是否存在.我不能使用read(),因为当前位置会改变并使用mark()并重置,这似乎是不合适的.
问题是,有时人们无法测试read()是否返回-1,因为如果你有一个流而某些第三方库使用它,你需要在发送它之前测试它是否为空.
通过空的InputStreams我的意思是这些 new ByteArrayInputStream(new byte[0])
我试图用FileInputStream打开文件,其名称中有空格.
例如:
String fileName = "This is my file.txt";
String path = "/home/myUsername/folder/";
String filePath = path + filename;
f = new BufferedInputStream(new FileInputStream(filePath));
Run Code Online (Sandbox Code Playgroud)
结果是抛出了FileNotFoundException.我试图硬编码filePath "/home/myUserName/folder/This\\ is\\ my\\ file.txt"只是为了看看我是否应该转义空白字符,它似乎没有用.对此事有何建议?
编辑:只是与所有人一起查看这个问题在同一页面上...打开一个文件,其名称中没有空格,一个有空格的文件失败.权限不是此处的问题,也不是文件夹分隔符.
我尝试使用CXF 2.6.0和spring 2.5.6开发REST Web服务我的pom.xml中的CXF maven依赖性是:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-search</artifactId>
<version>2.6.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我正在使用Spring 2.5.6并且我在applicationcontext.xml spring文件中声明了我的web服务:
<jaxrs:server id="restContainer" address="/sav">
<jaxrs:serviceBeans>
<ref bean="wssav"/>
</jaxrs:serviceBeans>
</jaxrs:server>
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
Run Code Online (Sandbox Code Playgroud)
我通过以下代码将我的Web服务声明为web.xml文件:
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
当我在tomcat上部署我的项目时,我在applicationcontext.xml文件中获得了第二个导入文件的异常:
java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf-extension-jaxrs-binding.xml] cannot be opened because it does not exist
Run Code Online (Sandbox Code Playgroud) 我正在使用Transformer通过添加更多节点来编辑Java中的XML文件.旧的XML代码没有改变,但是新的XML节点具有<而>不是<>并且在同一行上.而不是如何获得<> <和>以及如何获得新的节点后换行.我已经阅读了几个类似的线程,但无法获得正确的格式.以下是代码的相关部分:
// Read the XML file
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc=db.parse(xmlFile.getAbsoluteFile());
Element root = doc.getDocumentElement();
// create a new node
Element newNode = doc.createElement("Item");
// add it to the root node
root.appendChild(newNode);
// create a new attribute
Attr attribute = doc.createAttribute("Name");
// assign the attribute a value
attribute.setValue("Test...");
// add the attribute to the new node
newNode.setAttributeNode(attribute);
// transform the XML
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, …Run Code Online (Sandbox Code Playgroud) 我有一个文件,其中包含以下字符:"Joh 1:1ஆதியிலேஆதியிலேவாரதவாரததைதைதைஇருநஇருநஇருநததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுததுதது"""""""""""""""""""""""".
www.unicode.org/charts/PDF/U0B80.pdf
当我使用以下代码时:
bufferedWriter = new BufferedWriter (new OutputStreamWriter(System.out, "UTF8"));
Run Code Online (Sandbox Code Playgroud)
输出是框和其他奇怪的字符,如下所示:
"P = O֛; <一条Yՠ;"
有人可以帮忙吗?
这些是完整的代码:
File f=new File("E:\\bible.docx");
Reader decoded=new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8);
bufferedWriter = new BufferedWriter (new OutputStreamWriter(System.out, StandardCharsets.UTF_8));
char[] buffer = new char[1024];
int n;
StringBuilder build=new StringBuilder();
while(true){
n=decoded.read(buffer);
if(n<0){break;}
build.append(buffer,0,n);
bufferedWriter.write(buffer);
}
Run Code Online (Sandbox Code Playgroud)

StringBuilder值显示UTF字符,但在窗口中显示时,它显示为框.
找到问题的答案!!! 编码是正确的(即UTF-8)Java将文件读取为UTF-8,字符串字符为UTF-8,问题是在netbeans的输出面板中没有字体显示它.更改输出面板的字体(Netbeans-> tools-> options-> misc-> output选项卡)后,我得到了预期的结果.当它在JTextArea中显示时(需要更改字体),同样适用.但我们无法更改windows'cmd提示字体.
由于Hazelcast 2.5中已知(固定)的错误,我们已经确定这将是我们项目的下一个升级候选者.但是在放入最新版本(3.2.2)后,我们的表现非常糟糕.
我们使用Hazelcast的方式:
使用Hazelcast 2.5 map.values(),我们提供了一个包含所有包含密钥的列表,而不是使用它们map.getAll(containedKeys).我们通过EntryListener在映射中添加一个来跟踪containsKeys的方式,该映射将containsKeys存储在并发集中.这是由一位同事添加的,感觉就像一个黑客,但工作就像一个魅力.
现在,当我们升级到Hazelcast 3.2.2时,我们立即发现问题java.io,例如,请查看AppDynamics的以下代码段:
com.hazelcast.map.proxy.MapProxyImpl:getAll:326 (method time = 0 ms, total time = 18938 ms)
com.hazelcast.map.proxy.MapProxySupport:getAllObjectInternal:495 (method time = 0 ms, total time = 18938 ms)
com.hazelcast.map.MapService:toObject:852 (method time = 0 ms, total time = 18938 ms)
com.hazelcast.spi.impl.NodeEngineImpl:toObject:156 (method time = 0 ms, total time = 18938 ms)
com.hazelcast.nio.serialization.SerializationServiceImpl:toObject:221 (method time = 0 ms, total time = 18938 ms)
com.hazelcast.nio.serialization.StreamSerializerAdapter:read:59 (method time = 0 …Run Code Online (Sandbox Code Playgroud) 我必须在我的程序中读取txt文件.我目前正在使用FileReader和BufferedReader.我尝试使用Scanner,但速度比FileReader和BufferedReader慢.有没有可以更快读取文件的类?它必须用Java语言编写.
我需要从文本文件中读取所有单词(由空格分割的字符串)
所以,基本上我想从base64字符串内容创建一个临时文件.现在,我正在使用本机java-io函数.但我想用scala的rapture-io库来实现相同的结果.
所以我的问题是,是否有可能通过狂喜来实现这一点,如果是这样,怎么样?
我已经阅读了文档,但不够具体:
https://github.com/propensive/rapture-io/blob/master/doc/introduction.md
这是我的实际代码:
import org.apache.commons.codec.binary.Base64
import java.io.FileOutputStream
import java.io.File
val data: String = base64StringContent //Base64 String content of the file.
val fileName = myFileName
val fileExt = myFileExt
//It does write the file in my temp folder.
val file: File = File.createTempFile(fileName, fileExt)
val fileByteArray: Array[Byte] = Base64.decodeBase64(data)
val fileOutFile: FileOutputStream = new FileOutputStream(file)
fileOutFile.write(fileByteArray)
fileOutFile.close()
file.deleteOnExit()
file
Run Code Online (Sandbox Code Playgroud) 我试图/proc/net/xt_qtaguid/stats在Android 6中阅读.
使用cat命令,我得到这个:
2 a0 0 0 123456 311 48329 737 48 1
3 b0 0 0 0 0 0 0 0
4 c0 123456 311 48329 737 48 1
5 d0 111111 111 22222 222 33 1
Run Code Online (Sandbox Code Playgroud)
我的java代码尝试逐行读取文件:
File sysDataFile = new File(PATH_TO_FILE);
BufferedReader bufReader = null;
FileReader fileReader = null;
try {
fileReader = new FileReader(sysDataFile);
bufReader = new BufferedReader(fileReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
// print to …Run Code Online (Sandbox Code Playgroud) 我想知道是否有任何方法可以更新符号链接目标而不删除旧的符号链接。
我有两段代码,它们同时发生。第一部分是每小时下载一些数据并将其存储在 中/some/directory,并且它还将创建/most/recent/data指向新下载的数据的符号链接点。
第二部分将从 symlink 读取最新数据/most/recent/data。
下面是我当前创建符号链接的实现。但问题是,如果我们删除原来的符号链接,同时读取它,就会出现问题。有没有办法在不删除旧符号链接的情况下更新符号链接目标?
private void createSymLink(String symLinkPath, Path basePath) {
try {
Files.deleteIfExists(Paths.get(symLinkPath));
Files.createSymbolicLink(Paths.get(symLinkPath), basePath);
} catch (IOException e) {
}
}
Run Code Online (Sandbox Code Playgroud)
我想我刚刚找到了一些可能的解决方案。创建一个 tmp 符号链接,然后将其移至旧符号链接。因为移动是一个原子操作,所以符号链接更新也将是原子的。
private void createSymLink(String symLinkPath, Path basePath) {
try {
String tmpLink = "/tmp/tmpdir";
Files.createSymbolicLink(Paths.get(tmpLink), basePath);
Files.move(Paths.get(tmpLink), Paths.get(symLinkPath), ATOMIC_MOVE);
} catch (IOException e) {
}
}
Run Code Online (Sandbox Code Playgroud) java-io ×10
java ×8
android ×1
appdynamics ×1
cxf ×1
file-io ×1
filereader ×1
hazelcast ×1
inputstream ×1
io ×1
rapture.io ×1
rest ×1
scala ×1
spring ×1
symlink ×1
xml ×1