Nano Hash - криптовалюты, майнинг, программирование

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

В настоящее время я создал приложение Java, которое будет считывать значения ключей из файла ini. Значение ключа указывает на каталог, используя его абсолютный путь (пример c:\temp). Я пытаюсь использовать переменную String значения ключа, преобразовать ее в переменную File, а затем использовать эту переменную в FileReader. Проблема, с которой я сталкиваюсь, заключается в том, что служба наблюдения запускается, но когда я изменяю каталог наблюдения с помощью файла str.txt, он выдает ошибку и не проходит через оператор case 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

Ответы:


1

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

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

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

07.05.2020
  • У меня есть br.close(); в программе перед блоком catch внутренней попытки, однако он никогда не достигает этой точки, потому что текст в документе вызывает ответ в операторах switch, который никогда не происходит. Вдали от прочитанного ini-кода служба часов работает так, как должна. Это терпит неудачу только тогда, когда я пытаюсь использовать ключ значения ini, чтобы указать на файл, а не жестко кодировать имя файла в FileReader. Я хочу иметь возможность обновлять файл ini, что избавит меня от необходимости возвращаться к статическому перекодированию файла. Спасибо за отзыв. 08.05.2020

  • 2

    Я понял это, создав в 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);
    
    11.05.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..