如何在fileinputstream中输入一个文件到url?
我输入了Fileinputstream中的url,但是URL的输出是错误的,因为链接斜杠向后转向 - 从/到\和双斜杠//只有一个斜杠和向后.有一种方法fileinputstream要做到这一点?如果不是,你能告诉我应该使用什么而不是fileinputstream吗?
我正在尝试解组我的xml文件:
public Object convertFromXMLToObject(String xmlfile) throws IOException {
FileInputStream is = null;
File file = new File(String.valueOf(this.getClass().getResource("xmlToParse/companies.xml")));
try {
is = new FileInputStream(file);
return getUnmarshaller().unmarshal(new StreamSource(is));
} finally {
if (is != null) {
is.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:java.io.FileNotFoundException:null(没有这样的文件或目录)
这是我的结构:
为什么我无法从资源文件夹中获取文件?谢谢.
更新.
重构后,
URL url = this.getClass().getResource("/ xmlToParse/companies.xml"); 文件文件=新文件(url.getPath());
我可以更清楚地看到错误:
java.io.FileNotFoundException:/content/ROOT.war/WEB-INF/classes/xmlToParse/companies.xml(没有这样的文件或目录)
它试图找到WEB-INF/classes /我在那里添加了文件夹,但仍然收到此错误:(
我试图从中创建一个对象FileInputStream
并将文件的相对值传递给它的构造函数,但它无法正常工作并抛出一个FileNotFoundException
try {
InputStream is = new FileInputStream("/files/somefile.txt");
} catch (FileNotFoundException ex) {
System.out.println("File not found !");
}
Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的,但我想知道背景操作的差异.
InputStream is = new FileInputStream(filepath);
FileInputStream is = new FileInputStream(filepath);
上面两行代码之间的区别是什么,以及它们使用的场景.
我有一些非常标准的代码,它从流中获取一个序列化对象,基本上看起来像这样:
Object getObjectFromStream(InputStream is) { ObjectInputStream ois = new ObjectInputStream(is); return ois.readObject(); }
然后我在我的资源文件夹中有一个文件,所以在我的开发机器上,我可以将它作为文件引用,或者作为JarResource引用:
InputStream is = new FileInputStream("/home/.../src/main/resources/serializedObjects/testObject"); InputStream is = this.getClass().getResourceAsStream("/serializedObjects/testObject");
在我的脑海中,两者都应该做同样的事情.然而,当它发生时,两者都解析为有效(非空)流,但FileInputStream正确地从我的getObjectFromStream(InputStream)方法返回一个Object,而getResourceAsStream版本抛出此异常:
java.io.StreamCorruptedException: invalid stream header: EFBFBDEF at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:800) at java.io.ObjectInputStream.(ObjectInputStream.java:297)
大多数情况下,我想知道如何解决这个问题,但我也很欣赏理解两个InputStream之间的区别......
我一直在使用一段特定的代码来删除文件夹中的文件,但事实证明它很成问题,因为我可能忘了关闭一两个InputStream.我的代码是如此之大,以至于我无法看到所有未关闭的输入流.有没有办法删除文件是否有一个打开的InputStream?
这是我一直在使用的代码片段;
File fin = new File("C:/ABC Statements final/");
File[] finlist = fin.listFiles();
for (int n = 0; n < finlist.length; n++) {
if (finlist[n].isFile()) {
System.gc();
Thread.sleep(2000);
finlist[n].delete();
}
}
Run Code Online (Sandbox Code Playgroud)
我编辑了代码.这个版本有效.
我在我的Android APP中使用NanoHTTPD作为Web服务器,我希望在服务器端压缩一些文件并创建一个InputStream,然后使用Code A在客户端下载InputStream.
我在如何压缩和解压缩文件中读过代码B ?,但如何在Android中创建ZIP InputStream而不首先创建ZIP文件?
顺便说一句,我不认为Code C是好方法,因为它先制作ZIP文件,然后将ZIP文件转换为FileInputStream,我希望直接创建一个ZIP InputStream!
代码A.
private Response ActionDownloadSingleFile(InputStream fis) {
Response response = null;
response = newChunkedResponse(Response.Status.OK, "application/octet-stream",fis);
response.addHeader("Content-Disposition", "attachment; filename="+"my.zip");
return response;
}
Run Code Online (Sandbox Code Playgroud)
代码B.
public static void zip(String[] files, String zipFile) throws IOException {
BufferedInputStream origin = null;
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
try {
byte data[] = new byte[BUFFER_SIZE];
for (int i = 0; i < files.length; i++) {
FileInputStream fi = new FileInputStream(files[i]);
origin = new BufferedInputStream(fi, …
Run Code Online (Sandbox Code Playgroud) 假设我有一个名为abhishek.txt的文件,其中包含以下行
我是,你叫什么名字.
现在我想写
阿布舍克
在"我"之后,就像我是Abhishek,..如何直接在这个特定的位置写出内容.
我正在尝试创建多个图像文件的zip文件.我已成功创建所有图像的zip文件,但不知何故所有图像都被挂起到950字节.我不知道这里出了什么问题现在我无法打开图像被压缩成那个zip文件.
这是我的代码.任何人都可以让我知道这里发生了什么?
String path="c:\\windows\\twain32";
File f=new File(path);
f.mkdir();
File x=new File("e:\\test");
x.mkdir();
byte []b;
String zipFile="e:\\test\\test.zip";
FileOutputStream fout=new FileOutputStream(zipFile);
ZipOutputStream zout=new ZipOutputStream(new BufferedOutputStream(fout));
File []s=f.listFiles();
for(int i=0;i<s.length;i++)
{
b=new byte[(int)s[i].length()];
FileInputStream fin=new FileInputStream(s[i]);
zout.putNextEntry(new ZipEntry(s[i].getName()));
int length;
while((length=fin.read())>0)
{
zout.write(b,0,length);
}
zout.closeEntry();
fin.close();
}
zout.close();
Run Code Online (Sandbox Code Playgroud) 我正在将应用程序从Symbian/iPhone移植到Android,其中一部分是将一些数据保存到文件中.我使用FileOutputStream将文件保存到私有文件夹/ data/data/package_name/files中:
FileOutputStream fos = iContext.openFileOutput( IDS_LIST_FILE_NAME, Context.MODE_PRIVATE );
fos.write( data.getBytes() );
fos.close();
Run Code Online (Sandbox Code Playgroud)
现在我正在寻找一种如何加载它们的方法.我正在使用FileInputStream,但它允许我逐字节读取文件,这是非常低效的:
int ch;
StringBuffer fileContent = new StringBuffer("");
FileInputStream fis = iContext.openFileInput( IDS_LIST_FILE_NAME );
while( (ch = fis.read()) != -1)
fileContent.append((char)ch);
String data = new String(fileContent);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何使用更好的方式读取文件?
file-io android fileinputstream fileoutputstream android-file
fileinputstream ×10
java ×9
inputstream ×3
android ×2
file ×2
file-io ×2
java-io ×2
android-file ×1
delete-file ×1
spring-mvc ×1
textinput ×1
zip ×1
zipfile ×1