1.今天使用文件输入输出流当向磁盘中第一次插入文件中时成功了。当我向磁盘同样的路径中插入相同的文件时,报错如下:
java.io.FileNotFoundException: /2021-03-18/xxl123.RTCM (权限不够)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at com.cc21.postgrid.server.PostGridGreeterService.gridEncodePostRTCM(PostGridGreeterService.java:312)
at com.cc21.service.rpc.lib.PostGridGreeterGrpc$MethodHandlers.invoke(PostGridGreeterGrpc.java:438)
at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:171)
at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:283)
at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:707)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
仔细想了一下,是由于文件流使用完毕之后没有关闭,使得文件被流锁住了,下次插入新的文件的时候,要去删除旧的文件,这个时候是没办法删除的,你去手动删除的时候也删除不了,因为该文件和程序的流还绑定着。在程序用完流后将流关闭即可:
finally
{
if (fis != null)
{
try
{
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
System.out.println("关闭输出流失败");
}
}
}