Ошибка чтения файла java

Добрый день, возникла очень не понятная ошибка… Дело в том, что у меня некоторые данные хранятся в файле, при развертывании TomCat происходит удачное считывание с файлов. Но также у меня есть админка — там у пользователя есть возможно изменить данные в файле, после перезаписывании данных вылетает исключение(NullPointerException) видите ли такого файла не существует, хотя он находится там я проверял… Вообще не понятная ситуацию, вот методы для записи и чтение данных из файла:

Считывание

public synchronized String readFile(String filePath){
    StringBuffer txt = new StringBuffer();
    List<String> lines = null;
    try {
        lines = Files.readAllLines(Paths.get(filePath.toString()), StandardCharsets.UTF_8);
    } catch (IOException e) {
        log.error("Error reading from: " + filePath);
    } catch (NullPointerException e){
        log.error("Incorrect path : " + filePath);
    }
    for(String line: lines){
        txt.append(line);
    }
    return txt.toString();
}

Запись

public synchronized void writeFile(String filePath, String data){
    try {
        FileWriter out = new FileWriter(filePath, false);
        out.write(data);
        out.close();
    } catch (IOException e) {
        log.error("Error writing to file: " + filePath);
    }
}

Надеюсь, что кто-нибудь подскажет какая причина этого, потому что сам уже 2-ой день бьюсь с этим. Вот собственно ошибки, которые мне выдаются:

Type Exception Report
Message An exception occurred processing JSP page [/admin_room.jsp] at line [39]
Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception org.apache.jasper.JasperException: An exception occurred processing JSP page [/admin_room.jsp] at line [39] 

36:                 <form action="/CommonData" name="change_common_titels" 
method="POST" class="wrapper_admin row">
37:                     <div class="col-lg-5 col-md-5">
38:                         <label class="label_admin">Заголовок 
названия системы тестирования:</label>
39:                         <input name="name_test" type="text" 
class="input_admin" value="<%=FactoryModels.getCommonData(path + 
"title_test.txt")%>">
40:                     </div>
41:                     <div class="col-lg-5 col-md-5">
42:                         <label class="label_admin">Заголовок 
результата тестирования:</label>

Stacktrace:

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:481)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
ru.tidstu.testingsystem.servlets.DispatcherServlet.forward(DispatcherServlet.java:22)
ru.tidstu.testingsystem.servlets.admin_room.CommonDataServlet.doPost(CommonDataServlet.java:38)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Root Cause

java.lang.NullPointerException
ru.tidstu.testingsystem.models.IOFile.readFile(IOFile.java:33)
ru.tidstu.testingsystem.models.FactoryModels.getCommonData(FactoryModels.java:107)
org.apache.jsp.admin_005froom_jsp._jspService(admin_005froom_jsp.java:152)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
ru.tidstu.testingsystem.servlets.DispatcherServlet.forward(DispatcherServlet.java:22)
ru.tidstu.testingsystem.servlets.admin_room.CommonDataServlet.doPost(CommonDataServlet.java:38)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Здравствуйте, пытаюсь прочесть файл x.txt но возникает такая ошибка. Подскажите пожалуйста как исправить?

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Programa {
    public static void main(String[] args) throws FileNotFoundException {
        String separator = File.separator;
        String path = separator + "c" + separator + "Users" + separator + "X" + separator + "Desktop" + separator + "x.txt";

        File file = new File(path);

        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()){
            System.out.println(scanner.nextLine());
        }
        scanner.close();
    }
}
Exception in thread "main" java.io.FileNotFoundException: cUsersXDesktopx.txt (??????? ?? ??????? ????? ????????? ????)
	at java.base/java.io.FileInputStream.open0(Native Method)
	at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
	at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
	at java.base/java.util.Scanner.<init>(Scanner.java:639)
	at Programa.main(Programa.java:12)

I try to read JSON file with Java. The code is:

public static void main(String[] args) throws Exception {
    InputStream is = new FileInputStream("j.txt");
    String jsonTxt = IOUtils.toString( is );

    JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt );

    JSONObject routes = json.getJSONObject("routes");
    JSONObject legs = routes.getJSONObject("legs");
    JSONObject distance = legs.getJSONObject("distance");
    String dist = distance.getString("text");
}

And the line JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt ); makes an error:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at antmedic.algorithm.SimpleParser.main(SimpleParser.java:24)
 Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 13 more
Java Result: 1

I would be grateful for solving this problem.

asked Jan 16, 2011 at 16:35

Devel's user avatar

0

Latest version of Commons Lang (currently 3.1) has package name of org.apache.commons.lang3 instead of org.apache.commons.lang. For the later package name (as in your case), you should download 2.6 version of Commons Lang.

answered Jul 16, 2012 at 12:31

Xiao Jia's user avatar

Xiao JiaXiao Jia

4,1692 gold badges29 silver badges47 bronze badges

2

Sounds like you don’t have apache commons jar file in you class path

answered Jan 16, 2011 at 16:39

Amir Raminfar's user avatar

Amir RaminfarAmir Raminfar

33.7k7 gold badges92 silver badges123 bronze badges

5

You are missing some jar dependency which contains org.apache.commons.lang.exception.NestableRuntimeExceptio class. Look on internet where to find this class and add this jar in your classpath (in this case Apache Common Lang)

answered Jan 16, 2011 at 16:41

CodegistCRest's user avatar

You can update your maven pom.xml file with this. I had to specify 2.3 for the version to get it to download.

    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.3</version>
    </dependency>

answered Oct 7, 2012 at 7:50

Добрый день, возникла очень не понятная ошибка… Дело в том, что у меня некоторые данные хранятся в файле, при развертывании TomCat происходит удачное считывание с файлов. Но также у меня есть админка — там у пользователя есть возможно изменить данные в файле, после перезаписывании данных вылетает исключение(NullPointerException) видите ли такого файла не существует, хотя он находится там я проверял… Вообще не понятная ситуацию, вот методы для записи и чтение данных из файла:

Считывание

public synchronized String readFile(String filePath){
    StringBuffer txt = new StringBuffer();
    List<String> lines = null;
    try {
        lines = Files.readAllLines(Paths.get(filePath.toString()), StandardCharsets.UTF_8);
    } catch (IOException e) {
        log.error("Error reading from: " + filePath);
    } catch (NullPointerException e){
        log.error("Incorrect path : " + filePath);
    }
    for(String line: lines){
        txt.append(line);
    }
    return txt.toString();
}

Запись

public synchronized void writeFile(String filePath, String data){
    try {
        FileWriter out = new FileWriter(filePath, false);
        out.write(data);
        out.close();
    } catch (IOException e) {
        log.error("Error writing to file: " + filePath);
    }
}

Надеюсь, что кто-нибудь подскажет какая причина этого, потому что сам уже 2-ой день бьюсь с этим. Вот собственно ошибки, которые мне выдаются:

Type Exception Report
Message An exception occurred processing JSP page [/admin_room.jsp] at line [39]
Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception org.apache.jasper.JasperException: An exception occurred processing JSP page [/admin_room.jsp] at line [39] 

36:                 <form action="/CommonData" name="change_common_titels" 
method="POST" class="wrapper_admin row">
37:                     <div class="col-lg-5 col-md-5">
38:                         <label class="label_admin">Заголовок 
названия системы тестирования:</label>
39:                         <input name="name_test" type="text" 
class="input_admin" value="<%=FactoryModels.getCommonData(path + 
"title_test.txt")%>">
40:                     </div>
41:                     <div class="col-lg-5 col-md-5">
42:                         <label class="label_admin">Заголовок 
результата тестирования:</label>

Stacktrace:

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:481)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
ru.tidstu.testingsystem.servlets.DispatcherServlet.forward(DispatcherServlet.java:22)
ru.tidstu.testingsystem.servlets.admin_room.CommonDataServlet.doPost(CommonDataServlet.java:38)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Root Cause

java.lang.NullPointerException
ru.tidstu.testingsystem.models.IOFile.readFile(IOFile.java:33)
ru.tidstu.testingsystem.models.FactoryModels.getCommonData(FactoryModels.java:107)
org.apache.jsp.admin_005froom_jsp._jspService(admin_005froom_jsp.java:152)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
ru.tidstu.testingsystem.servlets.DispatcherServlet.forward(DispatcherServlet.java:22)
ru.tidstu.testingsystem.servlets.admin_room.CommonDataServlet.doPost(CommonDataServlet.java:38)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Sanan07, спасибо

Добавлено через 9 часов 26 минут
Есть еще одно «но»! Выдает он ошибку java.io.EOFException, потому что при открытии файла натыкается на «Маркер конца файла». И запись объекта идет после этого маркера. Т.Е. у меня постоянно при попытке чтения этого файла всегда будет

Добавлено через 5 минут
Установка маркера происходит после прохода строчки

Java
1
this.in = new ObjectInputStream(new FileInputStream("data/data.txt"));

До этого момента файл пуст

Добавлено через 15 минут
Если еще конкретнее, то запись этого маркера поисходит на шаге связывания файла со стримом

Добавлено через 3 минуты
Фигня какая-то. Выходит что маркер EOF не в конце, а постоянно в начале. Почему так?

Добавлено через 40 минут

Java
1
2
3
4
5
6
7
8
9
    private ObjectInputStream in = null;//переменная потока ввода
    private ObjectOutputStream out = null;//переменная потока вывода
    private FileOutputStream fo = null;
    private FileInputStream fi = null;
    private String fileName = "data/data.txt";
    fo = new FileOutputStream(fileName);
    fi = new FileInputStream(fileName);
    in = new ObjectInputStream(fi);
    out = new ObjectOutputStream(fo);

а здесь объявление in = new ObjectInputStream(fi) вообще вызывает java.io.EOFException.

Добавлено через 3 минуты
Насколько я понял

Java
1
out = new ObjectOutputStream(fo);

— пишет в файл маркер EOF
и когда я снова отправляю объект в поток

Java
1
2
out.writeObject(accounts);
                    out.flush();

то это дописывается в конец файла, после маркера. Т.е. при чтении

я всегда буду иметь EOF
Товарищи, что скажите? Как избежать этого? Что я не так делаю?

Добавлено через 1 час 45 минут

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 private ObjectInputStream in = null;//переменная потока ввода
    private ObjectOutputStream out = null;//переменная потока вывода
    private FileOutputStream fo = null;
    private FileInputStream fi = null;
    private String fileName = "data/data.txt";
    
    //конструктор
    public LoadUnloadData(){
        try {
                    fo = new FileOutputStream(fileName, false);
                    fi = new FileInputStream(fileName);
                    out = new ObjectOutputStream(fo);
                    in = new ObjectInputStream(fi);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    
    //выгрузка аккаунтов в файл
    public void unload(ArrayList<Account> accounts){
        try {
                    out.writeObject(accounts);
                    out.flush();

уже и параметр поставил для перезаписи(False) все равно пишет в начало файла EOF

Добавлено через 1 минуту
такое впечатление, что я один здесь

Добавлено через 54 минуты
Вот, элементарный пример набросал, так сказать, «скопируй и вставь» . Выводит все время «oops», а почему? Ну почему так, кто может объяснить?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  
            String fileName = "data.txt";
            ObjectInputStream in = null;//переменная потока ввода
            ObjectOutputStream out = null;//переменная потока вывода
            out = new ObjectOutputStream(new FileOutputStream(new File("data.txt"), false));
            in = new ObjectInputStream(new FileInputStream(fileName));
            
            out.writeObject(new String("Hi"));
            out.flush();
            
            if(in.read()!=-1){
                System.out.print((String)in.readObject());
            }else{
                System.out.print("oops");
            }

Добавлено через 2 часа 29 минут
Вот решение, человек на другом форуме помог, если кому понадобиться.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
 
public class Test {
 
    public static void main(String[] args) throws Exception {
 
        String path = "data.txt";
        File file = new File(path);
        
        file.delete();
        Object o = readObject(file);
        System.out.println(o);
    }
    
    static Object readObject(File file) throws Exception {
        
        if (file.length() == 0)
            return null;
        
        try (FileInputStream fis = new FileInputStream(file);
                ObjectInputStream ois = new ObjectInputStream(fis)) {
            
            return ois.readObject();
        }
    }
}

Понравилась статья? Поделить с друзьями:
  • Ошибка чтения файла data1 bin
  • Ошибка чтения установок компьютера фотошоп
  • Ошибка чтения установок компьютера photoshop
  • Ошибка чтения усилий лира сапр
  • Ошибка чтения транспортной карты