C читать файл строка за строкой

Я не собираюсь давать вам весь код, а просто начну.

Когда VideoStore расширяет Video, вы говорите, VideoStore - это Video, что неправильно, вы хотите сказать, что VideoStore имеет [ 116] с. Вам нужен список Video в вашем VideoStore

Так что ваш VideoStore должен выглядеть примерно так:

class VideoStore {
    Video[] videos = new Video[100];

    void addVideo(String name) {
        Video v = new Video(name);
        for(int i=0; i<videos.length; i++) {
            if(videos[i] == null) {
                videos[i] = v;
                break;
            }
        }
    }

    void doCheckout(String name) {
        int index = index(name);
        videos[index].setCheckout(true);
    }

    void doReturn(String name) {
        // your code
    }

    void receiveRating(String name, int rating) {
        // your code
    }

    void listInventory() {
       // your code
    }

    int index(String name) {
        // your code
    }

}

И к вашему допросу:

значения массива videoStore сбрасываются после каждого выполнения, я не знаю, почему

это нормально, они только в памяти и будут удалены после завершения программы. [1115 ]

25
задан leppie 17 August 2010 в 10:21
поделиться

8 ответов

Простой log4j.properties файл может быть похожим на это:

log4j.rootCategory=debug,console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.immediateFlush=true
log4j.appender.console.encoding=UTF-8
log4j.appender.console.threshold=info

log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d [%t] %-5p %c - %m%n

Место это в Вашем пути к классу (папка цели/классов). Или Вы, если у Вас есть проект Знатока, помещаете его под своим src/main/resources, и Eclipse скопирует его в Ваш путь к классу.

Без конфигурационного файла, необходимо видеть, что Eclipse предупреждает в консоли как это:

log4j:WARN No appenders could be found for logger.
log4j:WARN Please initialize the log4j system properly.
0
ответ дан 28 November 2019 в 20:36
поделиться

Убедитесь, что ваши log4j.properties или log4j.xml скопированы в ваш путь к классам IDE и загружаются при вызове BasicConfigurator.configure ()

0
ответ дан 28 November 2019 в 20:36
поделиться

Найдите уровень журнала в файле log4j.properties или log4j.xml . Вероятно, установлено значение ERROR вместо DEBUG

11
ответ дан 28 November 2019 в 20:36
поделиться

Настройка с помощью BasicConfigurator.configure (); устанавливает базовый консольный аппендер, установленный при отладке. Проект с описанной выше настройкой и без другого кода (за исключением теста) должен создавать три строки журнала в консоли. Я не могу ничего сказать, кроме «у меня работает».

Вы пытались создать пустой проект только с log4j и junit, используя только приведенный выше код, и запускали его?

Кроме того, чтобы запустить метод @Before :

@Test
public void testname() throws Exception {
    assertTrue(true);
}

EDIT :

Если вы запускаете более одного теста одновременно, каждый из них будет вызывать init перед запуском.

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

Чтобы избежать этого, вы можете использовать статический метод инициализации, помеченный @BeforeClass . Хотя это также происходит с файлами, вы можете посмотреть документацию по TestSuites в JUnit 4. И / или вызвать BasicConfigurator.resetConfiguration (); в аннотированном классе @AfterClass, чтобы удалить все регистраторы после каждый тестовый класс / набор тестов.

Кроме того, корневой регистратор используется повторно, поэтому, если вы установите уровень корневого регистратора в методе тестирования, который запускается раньше, он сохранит эту настройку для всех других тестов, которые запускаются позже, даже если они находятся в разных файлах. (не произойдет при сбросе конфигурации).

Testcase - это вызовет 9 строк журнала:

import static org.junit.Assert.assertTrue;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;

public class SampleTest
{
   private static final Logger LOGGER = Logger.getLogger(SampleTest.class);

   @Before
   public void init() throws Exception
   {
       // Log4J junit configuration.
       BasicConfigurator.configure();
   }

   @Test
    public void testOne() throws Exception {
       LOGGER.info("INFO TEST");
       LOGGER.debug("DEBUG TEST");
       LOGGER.error("ERROR TEST");

       assertTrue(true);
    }

   @Test
   public void testTwo() throws Exception {
       LOGGER.info("INFO TEST");
       LOGGER.debug("DEBUG TEST");
       LOGGER.error("ERROR TEST");

       assertTrue(true);
   }
}

Изменение метода инициализации сокращается до шести исключенных строк:

@BeforeClass
public static void init() throws Exception
{
    // Log4J junit configuration.
    BasicConfigurator.configure();
}

Ваша проблема, вероятно, вызвана каким-то другим тестовым классом или набором тестов, где уровень ведения журнала корня logger установлен на ERROR и не сбрасывается.

Вы также можете проверить это, сбросив настройки в методе @BeforeClass перед настройкой входа в систему.

Имейте в виду, что эти изменения могут нарушить ожидаемое ведение журнала для других тестовых случаев, пока оно не будет исправлено во всех местах. Я предлагаю попробовать, как это работает, в отдельной рабочей области / проекте, чтобы понять, как это работает.

9
ответ дан 28 November 2019 в 20:36
поделиться

Проверьте файлы конфигурации log4j в каталоге вывода (т.е. bin или target / classes) или в сгенерированных артефактах проекта (.jar / .war / .ear). Если это находится в вашем пути к классам, его подхватывает log4j.

1
ответ дан 28 November 2019 в 20:36
поделиться

Перейдите в раздел «Выполнить конфигурации» в своем eclipse, затем аргументы -VM добавьте следующее: -Dlog4j.configuration = log4j-config_folder / log4j.xml

замените log4j-config_folder структурой вашей папки, в которой находится ваш файл log4j.xml

21
ответ дан 28 November 2019 в 20:36
поделиться

Следует отметить одно: если у вас есть файл log4j.properties в пути к классам, вам не нужно вызывать BasicConfigurator. Описание того, как настроить файл свойств, находится здесь .

Вы можете точно определить, является ли ваша IDE причиной проблемы, попытавшись запустить этот класс из командной строки с log4j.jar и log4j.properties в пути к классам.

6
ответ дан 28 November 2019 в 20:36
поделиться

Похоже, log4j выбирает другой файл конфигурации, чем тот, который вы думаете.

Поместите точку останова в log4j, где открывается файл, и посмотрите файлы getAbsolutePath ().

1
ответ дан 28 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: