RandomAcessfile
私はその中にデータを書き込む前に空にする必要があります。私はini.setlength(0)
を作るときに私のコードは言うエラーキャッチ:?ここ Java:ストリームが閉じられた例外
"stream is closed" java.io.IOException: Stream Closed
at java.io.RandomAccessFile.setLength(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrap.invoke(PojoMetaMethodSite.java:213)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at locckGroovy.main(locckGroovy.groovy:82)
が私のコードで、私は何を変更する必要があります(それは、この機能はすべてのINIチャネルを閉じ、その後、私はしてみてください)(そのini.setlengthをpossbileですまた、チャネルをクローズします)、RAFのためのユニークな
class locckGroovy {
private static void setValue(String tag, Element element , String input) {
NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = (Node) nodes.item(0);
node.setTextContent(input);
}
public static void main(String[] args) {
File file = new File("C://Users//user//Desktop//conf1.xml");
String content = '';
BufferedReader s;
BufferedWriter w;
RandomAccessFile ini;
FileLock lock;
DocumentBuilder dBuilder = null;
Document doc=null;
String start, startDate, endDate, runAs, makeVersion, patch;
try {
ini = new RandomAccessFile(file, "rwd");
lock = ini.getChannel().lock();
String sCurrentLine;
s = new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8"));
while ((sCurrentLine = s.readLine()) != null) {
content += sCurrentLine;
}
s.close();
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dBuilder = dbFactory.newDocumentBuilder();
InputStream stream = new ByteArrayInputStream(content.getBytes('UTF-8'));
doc = dBuilder.parse(stream);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("localAttributes");
int m = 0;
for (int i = 0; i != nList.getLength(); ++i) {
Node child = nList.item(i);
if (!(child instanceof Element))
continue;
if (child.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) child;
setValue("runAs", element, "true");
}
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
StreamResult result1 = new StreamResult(bos);
try {
transformer.transform(source, result1);
} catch (TransformerException e) {
e.printStackTrace();
}
byte[] array = bos.toByteArray();
String data = bos.toString();
if (!data.isEmpty()) {
ini.setLength(0);
w = new BufferedWriter(Channels.newWriter(ini.getChannel(), "UTF-8"));
w.write(data);
w.close();
}
}finally {
lock.release();
ini.close();
}
}
}
どの行が例外をスローしますか? **あなたの質問にstacktraceを含める** – Kayaman
ini.setLength(0); –
書き込み処理が同期化されている可能性はありますか?processRandomAccessFile ini = new RandomAccessFile(file、 "rw");あまりにも多くの時間がかかり、私はそれのストリームbacausを閉じることができないのですか? –