Как я могу использовать Java для чтения значения ключа в ini-файле, которое указывает на текстовый файл? - PullRequest
0 голосов
/ 08 мая 2020

В настоящее время я создал приложение Java, которое будет считывать значения ключей из ini-файла. Значение ключа указывает на каталог, используя его абсолютный путь (пример c: \ temp). Я пытаюсь использовать переменную String значения ключа, преобразовать ее в переменную File, а затем использовать эту переменную в FileReader. Проблема, с которой я столкнулся, заключается в том, что служба часов запускается, но когда я изменяю каталог просмотра с файлом str.txt, он выдает ошибку и не запускается через оператор switch case. Я также пытался использовать переменную Path в bufferedReader, поэтому вы увидите ее в инструкции try, которая также не сработала, я думаю, я должен был это знать.

вот результаты:

java.io.FileNotFoundException: 
z:\java_apps (Access is denied)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import org.ini4j.Wini;

public class readIni {
public static String iniPath;
public static Path directory;
public static BufferedReader br;

public static void main(String[] args) throws IOException {

    try {

        Wini ini = new Wini(new File("z:\\java_apps\\java.ini"));
        iniPath = ini.get("filepath", "filepath"); 

        WatchService watchService = FileSystems.getDefault().newWatchService();
         directory = Paths.get(iniPath);


        WatchKey watchKey = directory.register(watchService, 
        StandardWatchEventKinds.ENTRY_CREATE,
        StandardWatchEventKinds.ENTRY_MODIFY,
        StandardWatchEventKinds.ENTRY_DELETE);

        while(true) {
        for (WatchEvent<?> event : watchKey.pollEvents()) {


        try { 
            //read text into buffReader from file 
            Path path = directory.resolve((Path)event.context());               
            File file = new File(iniPath);

            br = new BufferedReader(new FileReader(file));

            System.out.println(file);

            //create empty string, read file content line by line while the line is not empty
            String str = "";
            String line = br.readLine();

            while (line != null) {
            str= line;
            line = br.readLine(); 

            //begin switch

Ответы [ 2 ]

0 голосов
/ 12 мая 2020

Я понял это, создав еще одну запись в ini-файле, указывающую на текстовый файл. Я создал еще одну строку для указания на текстовый файл вместо использования переменной iniPath, которую должен использовать Paths.get (). Первоначально я использовал inipath как строку текстового файла, которая выдавала мне ошибки.

 try {
     //outter try 
     //read ini file create, instantiate variables
    Wini ini = new Wini(new File("z:\\java_apps\\java.ini"));
    iniPath = ini.get("filepath", "filepath"); 
    textFile = ini.get("file", "file");

Then later in the code

 try {
      //inner try
      //read text into buffReader from file 
        Path path = directory.resolve((Path)event.context());               
        File file = new File(textFile);
0 голосов
/ 08 мая 2020

Может ли быть так, что файл все еще открыт программой, когда она пытается открыть и прочитать его во второй раз?

Это объясняет сообщение access denied.

В этом случае, я бы предложил закрыть файл в конце чтения.

...