我有一个 JAR 文件 Movie Library.jar,其内容如下所示:

PropertiesUtils 类位于 client.jar(如图所示)中,属性文件位于资源文件夹中的属性文件夹中。
我正在尝试将属性加载为:
String absolutePath = LazyProperties.class.getClass().getResource(filePath).getPath();
File file = new File(absolutePath);
InputStream stream = new FileInputStream(file);
Properties properties = new Properties();
properties.load(stream);
Run Code Online (Sandbox Code Playgroud)
但它显示:
file:\D:\Code\MovieLibrary\build\jar\Movie%20Library.jar!\resources\properties\movie_library.properties (The filename, directory name, or volume label syntax is incorrect)
Run Code Online (Sandbox Code Playgroud)
我无法将其视为System.out.println(file)印刷品:
file:/D:/Code/MovieLibrary/build/jar/Movie%20Library.jar!/resources/properties/movie_library.properties
Run Code Online (Sandbox Code Playgroud)
任何帮助都是可观的。提前致谢。
我有一个从 xml 文件中获取输入流的网络服务。现在,我想验证并使用相同的输入流读取它。我使用标记并重置它。
在 Glassfish 和 Websphere 上它工作正常。但是当我使用 openEJB 运行我的集成测试时,流将在验证后关闭。我可以在一个简单的例子中重现它。
我怎样才能更好地意识到它?验证器实现始终相同。但是每个环境都使用输入流的另一种实现。
public class XMLReader {
public static void main(String[] args) {
try {
XMLReader reader = new XMLReader();
InputStream stream = new BufferedInputStream(new FileInputStream(
new File("myXML.xml")));
reader.read(stream);
} catch (Exception e) {
e.printStackTrace();
}
}
public void read(InputStream xmlInputStream) throws SAXException,
IOException {
if (xmlInputStream.markSupported()) {
xmlInputStream.mark(0);
validateXML(xmlInputStream);
xmlInputStream.reset();
readXML(xmlInputStream);
}
}
private void readXML(InputStream xmlInputStream) {
// READ xmInputStream with STAX, JAXB, etc. whatever
}
private void validateXML(InputStream xmlInputStream) …Run Code Online (Sandbox Code Playgroud) 我有一个本地 FTP 服务器(使用 FileZilla 服务器创建),并且很少有 XLS 文件。我需要将文件输入流返回到我的 Java 应用程序,以便我可以解析数据等。
为此,我尝试使用 FTPClient,但出于某种原因,在尝试从文件(大于 40KB 或)返回输入流时,FTPClient.retrieveFileStream() 挂起。
我知道有与此类似的问题,我已经阅读了所有内容,至少我能找到的所有内容都已阅读,但没有任何帮助。这真的很烦人,如果可能的话,我想要一些帮助。
相关代码部分:
public FTPwrapper(){
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Properties props = (Properties) context.getBean("ftp_props");
this.FTPhost = props.getProperty("host");
this.FTPuser = props.getProperty("user");
this.FTPpass = props.getProperty("pass");
this.FTPport = Integer.parseInt(props.getProperty("port"));
this.filesPath = props.getProperty("filesPath");
//start ftp connection
try {
client.connect(this.FTPhost, this.FTPport);
client.login(this.FTPuser, this.FTPpass);
client.setBufferSize(1024 * 1024);
client.enterLocalPassiveMode();
client.setFileType(FTP.BINARY_FILE_TYPE);
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
public InputStream returnFileStream(String FileName){
InputStream inputstream = null;
try {
String remoteFile = this.filesPath+FileName;
inputstream …Run Code Online (Sandbox Code Playgroud) 我有以下字符串,其中 隐藏了特殊字符。我只想Â从这个字符串中删除~IQBAL~KARACHI¦~~~~~~~~~~~。
这是一个前后图像来显示我的意思:
我试过这个代码:
responseMessageUTF.replaceAll("\\P{InBasic_Latin}", "");
Run Code Online (Sandbox Code Playgroud)
但这也正在取代¦角色。有没有办法只删除Â字符而不删除¦字符?
我有这段代码,它根据给定的条件一次只生成一个 Jasper 报告到 PDF。但是如果我想将两个 Jaspers 合并成一个 PDF 文件怎么办?(即 PDF 输出应该是 LoadTagR2R.jasper + LoadTagR2RLandscape.jasper —— 这将是一个包含多页的 PDF 输出流)
if (fullHalfTag.equalsIgnoreCase("Y")){ //Read FULL_HALF_TAG value (if FULL_HALF_TAG == 'Y')
logger.debug("Printing FULL tag...");
reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/LoadTagR2RLandscape.jasper");
} else {
logger.debug("Printing HALF tag...");
reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/LoadTagR2R.jasper");
}
//Report parameters
Map parameters = new HashMap();
parameters.put("PLT_NO", pltNo);
parameters.put("TICKET_NO", ticketNo);
try {
Connection conn = ConnectionUtils.getConnection();
JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream, parameters, conn);
response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
Run Code Online (Sandbox Code Playgroud)
我尝试合并两个输入流,如下所示,但没有奏效。想法?
new java.io.SequenceInputStream(s1, s2).
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码在 PNG 图像中写入元数据:
public synchronized static byte[] writeMetaDataInPNGImage(BufferedImage buffImg,
String key, String value)
{
byte[][] image = null;
try
{
ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
ImageWriteParam writeParam = writer.getDefaultWriteParam();
ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier
.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
// adding metadata
IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam);
IIOMetadataNode textEntry = new IIOMetadataNode("tEXtEntry");
textEntry.setAttribute("keyword", key);
textEntry.setAttribute("value", value);
IIOMetadataNode text = new IIOMetadataNode("tEXt");
text.appendChild(textEntry);
IIOMetadataNode root = new IIOMetadataNode("javax_imageio_png_1.0");
root.appendChild(text);
int width = buffImg.getWidth();
int height = buffImg.getHeight();
metadata.mergeTree("javax_imageio_png_1.0", root);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream stream = …Run Code Online (Sandbox Code Playgroud) 我正在将一个excel(xls)文件上传到s3,然后另一个应用程序应该从s3下载该文件并使用Apache POI阅读器进行解析.读者接受inputstream类型作为输入,但要正确解析它所期望的excel PushbackInputStream.我从s3下载的文件中获得的输入流是类型的S3ObjectInputStream.我如何转换S3ObjectInputStream为PushbackInputStream?
我尝试直接传递S3ObjectInputStream(因为这是一个inputStream)PushbackInputStream,但它导致以下异常:
org.springframework.batch.item.ItemStreamException: Failed to initialize the reader
at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:147)
at org.springframework.batch.item.support.CompositeItemStream.open(CompositeItemStream.java:96)
.....
.....
Caused by: java.lang.IllegalStateException: InputStream MUST either support mark/reset, or be wrapped as a PushbackInputStream
at org.springframework.batch.item.excel.poi.PoiItemReader.openExcelFile(PoiItemReader.java:82)
.....
Run Code Online (Sandbox Code Playgroud)
我尝试将S3ObjectInputStream转换为PushbackInputStream,但它导致了classcastexception.
java.lang.ClassCastException: com.amazonaws.services.s3.model.S3ObjectInputStream cannot be cast to java.io.PushbackInputStream
Run Code Online (Sandbox Code Playgroud)
任何人都知道解决方案
"一次读取的字节数组是不是每次读一个字节快得多"
我看到这句话有,而我是努力学习的输入流.为什么会这样?
我想把a的内容读InputStream成String:
private String readToString(InputStream stream) {
return new BufferedReader(new InputStreamReader(stream))
.lines().collect(Collectors.joining("\n"));
}
Run Code Online (Sandbox Code Playgroud)
流来自java.lang.Process.
问题:我是否必须明确关闭任何一个InputStream,InputStreamReader或者BufferedReader在这种情况下?
旁注:链接的问题不是重复的,因为我的问题是如何正确关闭流,而不是如何将流读取到字符串!
java.io.InputStream在尝试读取a 之前,Java是否有任何可靠的方法来确定a 是否关闭?
我的用例是我有一个接受InputStream参数并从中读取参数的方法。该方法在其自己的线程中运行,如果输入流关闭,我想终止该线程。
InputStreamImplements Closeable,它提供一种close()方法,但显然无法查询实例是否已关闭。
尝试从封闭状态读取InputStream将引发IOException,但可能还有其他原因,并且接口合同中没有任何内容说明这种情况是否永久存在,或者在某些情况下是否有可能在某个时候消失。
我的方法的调用者可以提供所需的任何子类InputStream,因此不能依靠特定的子类行为。
还有其他想法吗?
inputstream ×10
java ×10
amazon-s3 ×1
apache-poi ×1
byte ×1
excel ×1
file ×1
ftp ×1
io ×1
java-8 ×1
metadata ×1
pdf ×1
properties ×1
string ×1
utf-8 ×1
validation ×1
xml ×1
xsd ×1