Невозможно изменить текстовый файл в веб-службе REST - PullRequest
0 голосов
/ 24 апреля 2019

Моя программа реализует метод X веб-службы REST, который вызывает другой метод Y в другом классе.Последний изменяет строку в текстовом файле.

Я проверил метод Y без использования метода REST X, и все прошло хорошо, и файл был изменен.Но когда я вызываю метод PUT X, файл не изменяется.

Метод Java веб-службы выглядит следующим образом:

public String reduceEnergyConsumption(int id, String action) {
        String ch;
        int nb;
        if (action=="reduce")
            AQSensor.setState(id,"Off"); 
        else
            AQSensor.setState(id,"On");

        return action;
}

AQSensor:

static AirQualitySensorManager AQSensor= new AirQualitySensorManagerImp();

Метод setSate (id, state) выглядит следующим образом:

public void setState(int id, String state) {
        Vector<String> VInter= new Vector<String>();
        try {
            InputStream ips = new FileInputStream("stateAQS.txt");
            InputStreamReader ipsr = new InputStreamReader(ips);
            BufferedReader br = new BufferedReader(ipsr);
            String ligne;
            int i=0;
            while ((ligne = br.readLine()) != null)
            {
                i++;   
                VInter.add(ligne);
            }
            VInter.setElementAt(state, id);
    //****move the vector in the file
            OutputStream ops = new FileOutputStream("stateAQS.txt");
            OutputStreamWriter opsw = new OutputStreamWriter(ops);
            BufferedWriter bw = new BufferedWriter(opsw);
            for(int e=0;e<VInter.size();e++){
                bw.append(VInter.elementAt(e));
                bw.newLine();
            }
            bw.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Код вызова в клиенте выглядит следующим образом:

Scanner sc = new Scanner(System.in);
System.out.println("enter the action: ");
String action = sc.nextLine();
System.out.println("enter the index: ");
String pr= sc.nextLine();

Entity<String> userEntity = Entity.entity(action, MediaType.TEXT_PLAIN);
Response response = target.path("aqsensor").path("reduceEnergy/"+pr+"/"+action).request().put(userEntity);

System.out.println("response is: "+response.getStatus());

Теперь, когда я запускаю это, онпоказывает мне следующее:

enter the action:
rise
enter the index:
5
response is: 200

Итак, 200 Ok.Но строка файла не изменилась.В чем проблема?

Заранее спасибо.

1 Ответ

1 голос
/ 25 апреля 2019

Проблема в том, что вы не указываете полный путь к файлу. Поскольку вы указываете только имя файла, приложение выполняет поиск файла в текущем каталоге. Когда вы вызываете метод REST API, текущий каталог не является каталогом, в котором находится файл, и метод не может найти файл.

Вы можете решить свою проблему, указав полное имя пути в качестве параметра FileInputStream и FileOutputStream.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...