GVKun编程网logo

java.io.FileNotFoundException :(使用ObjectOutputStream编写对象时(权限被拒绝)(java.io.objectinputstream cannot be resolved)

16

如果您对java.io.FileNotFoundException:感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于java.io.FileNotFoundException

如果您对java.io.FileNotFoundException :感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于java.io.FileNotFoundException :的详细内容,我们还将为您解答使用ObjectOutputStream编写对象时的相关问题,并且为您提供关于android kotlin java.io.FileNotFoundException:/storage/emulated/0/number.txt:打开失败:EACCES(权限被拒绝)、ArrayIndexOutOfBoundsException: 8440 at redis.clients.util.RedisOutputStream.write(RedisOutputStream.java、Caused by: java.lang.ClassNotFoundException: org.fusesource.jansi.WindowsAnsiOutputStream、com.jcraft.jsch.JSchException: java.io.FileNotFoundException: file:\D:\development\ideaProjects\s...的有价值信息。

本文目录一览:

java.io.FileNotFoundException :(使用ObjectOutputStream编写对象时(权限被拒绝)(java.io.objectinputstream cannot be resolved)

java.io.FileNotFoundException :(使用ObjectOutputStream编写对象时(权限被拒绝)(java.io.objectinputstream cannot be resolved)

我已经尝试解决了几个小时,我非常沮丧,所以我来找你们寻求指导。

我正在尝试保存和检索我创建的用户对象。我想要这样做,以便可以从整个应用程序的任何意图中保存和检索此User对象,因此我决定使用FileInput和Output流。我在下面都包含了我的代码。

这是我的输出数据方法:

public static void serializeDataOut(User ish) {    try {        String path = Environment.getExternalStorageDirectory().getAbsolutePath();        File newFile = new File(path + "myFile.ser");        FileOutputStream fos = new FileOutputStream(newFile);        ObjectOutputStream oos = new ObjectOutputStream(fos);        oos.writeObject(ish);        oos.flush();        oos.close();    } catch (IOException e) {        e.printStackTrace();    }}

这是我的输入数据方法:

public static User serializeDataIn(){    try{        String path = Environment.getExternalStorageDirectory().getAbsolutePath();        FileInputStream fin = new FileInputStream(path + "myFile.ser");        ObjectInputStream ois = new ObjectInputStream(fin);        User iUser = (User) ois.readObject();        ois.close();        return iUser;    } catch (IOException | ClassNotFoundException e) {        e.printStackTrace();        return null;    }}

注意:这两个方法都位于我的User类中,该类也实现了Serializable。

文件路径的整个错误看起来是这样的:java.io.FileNotFoundException: /storage/emulated/0myFile.ser(Permission denied)它出现在这一行:FileOutputStream fos = newFileOutputStream(newFile);当我从另一个意图调用它时,如下所示:User.serializeDataOut(addingUser);其中addingUser是有效的User对象。

在异常日志中看到(权限被拒绝)后,我要做的第一件事是进入清单并检查是否允许我的应用程序读写存储,实际上我确实这样做了。我的权限如下:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

然后我读到一些人,如果他们有错误的路径,更确切地说不包括绝对路径,就会遇到此错误,然后我编辑了代码以包含该Environment.getExternalStorageDirectory().getAbsolutePath();部分,我确信我使用的是正确的。

我还确保,因为我正在模拟器上进行测试,所以我启用了SD卡,并且模拟器具有SD文件夹。我检查了一下,确实确实有一个SD卡文件夹,并且我还在S8上测试了此应用程序,但遇到了同样的错误。

我到底在做什么错?我要做的只是保存一个User对象,然后在其他地方检索它,对于以前的文件被覆盖并且一次只保存一个User的情况,我完全可以。

我可能还注意到了一些与之相关的事情:大约每3-5秒在我的Android监视器中,即使我杀死了我的应用程序,错误仍然不断弹出。错误看起来像这样:onFatalError,processing error from engine(4) com.google.android.apps.gsa.shared.speech.a.g:Error reading from input stream尽管我只能假定这不是问题的根源,但我只是想将其添加进来,以防万一。谢谢

答案1

小编典典

您已在清单中添加了权限,因此我确定您不是在询问运行时权限。如果您使用的是SDK 23或更高版本,请询问运行时权限。供参考,我在这里添加一些代码段:

if(Build.VERSION.SDK_INT>22){     requestPermissions(new String[] {YOUR_PERMISSIONS AS STRING}, 1);}

并检查是否授予许可,您需要使用onRequestPermissionResults()方法。

@Overridepublic void onRequestPermissionsResult(int requestCode,                                       String permissions[], int[] grantResults) {    switch (requestCode) {        case 1: {            if (!(grantResults.length > 0                    && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED)) {                Toast.makeText(addAlarm.this, "Permission denied to access your location.", Toast.LENGTH_SHORT).show();            }        }    }}

android kotlin java.io.FileNotFoundException:/storage/emulated/0/number.txt:打开失败:EACCES(权限被拒绝)

android kotlin java.io.FileNotFoundException:/storage/emulated/0/number.txt:打开失败:EACCES(权限被拒绝)

对于Android 10,您可以将android:requestLegacyExternalStorage="true"添加到清单中的<application>元素中。这使您可以选择旧式存储模型,并且您的外部存储代码应该可以使用。

对于读取操作,即使您将targetSdkVersion提高到30或更高,您也仍然应该能够按照“原始路径”的更改来完成在Android 11+上的操作。

但是,对于 write 操作,您必须在2021年下半年之前切换到其他位置:

  • 使用Context上的方法(例如getExternalFilesDir())访问您的应用可以写入的外部存储上的目录。您无需任何权限即可在Android 4.4+上使用这些目录。但是,卸载应用程序后,存储在其中的数据将被删除。

  • 使用存储访问框架,例如ACTION_OPEN_DOCUMENTACTION_CREATE_DOCUMENT

  • 如果您的内容是媒体,则可以使用MediaStore将媒体放置在标准媒体位置。

ArrayIndexOutOfBoundsException: 8440 at redis.clients.util.RedisOutputStream.write(RedisOutputStream.java

ArrayIndexOutOfBoundsException: 8440 at redis.clients.util.RedisOutputStream.write(RedisOutputStream.java



java.lang.ArrayIndexOutOfBoundsException: 8440
at redis.clients.util.RedisOutputStream.write(RedisOutputStream.java:35)
at redis.clients.jedis.Protocol.sendCommand(Protocol.java:39)
at redis.clients.jedis.Protocol.sendCommand(Protocol.java:33)
at redis.clients.jedis.Connection.sendCommand(Connection.java:80)
at redis.clients.jedis.BinaryClient.set(BinaryClient.java:86)
at redis.clients.jedis.Client.set(Client.java:21)
at redis.clients.jedis.Jedis.set(Jedis.java:50)
at cn.qjj.business.EmailBus.email(EmailBus.java:107)
at cn.qjj.business.EmailBus$1.run(EmailBus.java:178)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
2016-07-20 15:14:37 INFO  EmailBus:181 - -failed---http://tieba.baidu.com/p/1052904941
2016-07-20 15:14:37 INFO  EmailBus:103 - 45
java.lang.ArrayIndexOutOfBoundsException: 8441
at redis.clients.util.RedisOutputStream.write(RedisOutputStream.java:35)
at redis.clients.jedis.Protocol.sendCommand(Protocol.java:39)
at redis.clients.jedis.Protocol.sendCommand(Protocol.java:33)
at redis.clients.jedis.Connection.sendCommand(Connection.java:80)
at redis.clients.jedis.BinaryClient.set(BinaryClient.java:86)
at redis.clients.jedis.Client.set(Client.java:21)
at redis.clients.jedis.Jedis.set(Jedis.java:50)
at cn.qjj.business.EmailBus.email(EmailBus.java:107)
at cn.qjj.business.EmailBus$1.run(EmailBus.java:178)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.ClassNotFoundException: org.fusesource.jansi.WindowsAnsiOutputStream

Caused by: java.lang.ClassNotFoundException: org.fusesource.jansi.WindowsAnsiOutputStream

08:23:18,995 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
08:23:18,997 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE]
08:23:19,050 |-WARN in Logger[org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator] - No appenders present in context [default] for logger [org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator].
08:23:19,059 |-INFO in ch.qos.logback.core.ConsoleAppender[CONSOLE] - Enabling JANSI WindowsAnsiOutputStream for the console.
08:23:19,061 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - Failed to create WindowsAnsiOutputStream. Falling back on the default stream. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type org.fusesource.jansi.WindowsAnsiOutputStream
    at ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type org.fusesource.jansi.WindowsAnsiOutputStream
    at     at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:69)
    at     at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:40)
    at     at ch.qos.logback.core.ConsoleAppender.getTargetStreamForWindows(ConsoleAppender.java:88)
    at     at ch.qos.logback.core.ConsoleAppender.start(ConsoleAppender.java:79)
    at     at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
    at     at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
    at     at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
    at     at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
    at     at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
    at     at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
    at     at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
    at     at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
    at     at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
    at     at org.springframework.boot.logging.logback.LogbackLoggingSystem.configureByResourceUrl(LogbackLoggingSystem.java:175)
    at     at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:152)
    at     at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:79)
    at     at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:59)
    at     at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:117)
    at     at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:279)
    at     at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:254)
    at     at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:219)
    at     at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:196)
    at     at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
    at     at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
    at     at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
    at     at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
    at     at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:75)
    at     at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53)
    at     at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:340)
    at     at org.springframework.boot.SpringApplication.run(SpringApplication.java:304)
    at     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1213)
    at     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1202)
    at     at com.nums.industry3.Industry3Application.main(Industry3Application.java:12)
Caused by: java.lang.ClassNotFoundException: org.fusesource.jansi.WindowsAnsiOutputStream
    at     at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
    at     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at     at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:56)
    at     ... 32 common frames omitted

使用springboot中的logback时候,没有解决的问题

com.jcraft.jsch.JSchException: java.io.FileNotFoundException: file:\D:\development\ideaProjects\s...

com.jcraft.jsch.JSchException: java.io.FileNotFoundException: file:\D:\development\ideaProjects\s...

com.jcraft.jsch.JSchException: java.io.FileNotFoundException: file:\D:\development\ideaProjects\salary-card\target\salary-card-0.0.1-SNAPSHOT.jar!\BOOT-INF\classes!\keystore\login_id_rsa (文件名、目录名或卷标语法不正确。)

Caused by: java.io.FileNotFoundException: file:\D:\development\ideaProjects\salary-card\target\salary-card-0.0.1-SNAPSHOT.jar!\BOOT-INF\classes!\keystore\login_id_rsa (文件名、目录名或卷标语法不正确。)

 

问题:

  资源未获取到,开发环境没问题,测试环境有问题;

原因:

  经排查,发现是因为在打完 jar 包后运行,jar 包中无法获取对应目录的资源文件;

  这主要是因为 jar 包是一个单独的文件而不是文件夹,不能通过 “file:\D:\development\ideaProjects\salary-card\target\salary-card-0.0.1-SNAPSHOT.jar!\BOOT-INF\classes!\keystore\login_id_rsa” 定位 jar 包内的资源。

解决:

  所以综上所述,我们在通过 jar 包来访问的话,不要使用 getResource 或 getFile 方法来访问了,使用 resource.getInputStream() getResourceAsStream() 方法,通过流的形式来访问资源是可以的;

  例:

 

InputStream is=this.getClass().getResourceAsStream("keystore/login_id_rsa"); 
BufferedReader br
=new BufferedReader(new InputStreamReader(is));
String s
="";
while((s=br.readLine())!=null)
  System.out.println(s);

 

  

Resource resource = new ClassPathResource("keystore/login_id_rsa");
InputStream inputStream = resource.getInputStream();
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = inputStream.read(buff, 0, 100)) > 0) {
       swapStream.write(buff, 0, rc);
}

 

今天关于java.io.FileNotFoundException :使用ObjectOutputStream编写对象时的讲解已经结束,谢谢您的阅读,如果想了解更多关于android kotlin java.io.FileNotFoundException:/storage/emulated/0/number.txt:打开失败:EACCES(权限被拒绝)、ArrayIndexOutOfBoundsException: 8440 at redis.clients.util.RedisOutputStream.write(RedisOutputStream.java、Caused by: java.lang.ClassNotFoundException: org.fusesource.jansi.WindowsAnsiOutputStream、com.jcraft.jsch.JSchException: java.io.FileNotFoundException: file:\D:\development\ideaProjects\s...的相关知识,请在本站搜索。

本文标签: