Как я нахожу папку 'Documents' пользователя с Java в OS X?

Вот кое-что из того, что я нарисовал, и, надеюсь, оно поможет вам: https://codesandbox.io/s/m30ym10m9p

По сути, у вас есть некоторые elems в массиве, хранящемся в состоянии, у вас есть {this.state.elems.map((elem, i) => (

{elem.text}

))} ); }

Добавить элемент в состояние (объяснено в более подробно в нижней части поста):

addElem = () => {
  const elems = [...this.state.elems];

  // create empty id to be filled later
  let timeoutProps = { id: null };

  // set timeout for element to be removed
  const timeoutId = setTimeout(
    ({ id }) => {
      this.removeElem(id);
    },
    1000,
    timeoutProps
  );

  // quickly add timeout id to props, which will get passed back in to timeout
  timeoutProps["id"] = timeoutId;

  // add new element to "elems" array
  elems.push({
    text: `New!! (${timeoutId})`,
    id: timeoutId
  });

  // update state
  this.setState({ elems });
};

Удалить элемент из состояния:

removeElem = id => {
  let elems = [...this.state.elems].filter(elem => elem.id !== id);
  this.setState({ elems });
};

render довольно просто, но дайте мне знать, если у вас есть вопросы по тот. Прикольная часть моего кода - это метод addElem. Я хотел убедиться, что timeoutId был сохранен после создания тайм-аута, и после того, как тайм-аут истек, функция removeElem может быть вызвана с переданным ему идентификатором тайм-аута.

Чтобы передать идентификатор тайм-аута в removeElem (после истечения тайм-аута), я должен был быть немного хитрым с объектами javascript.

  • Во-первых, мы создаем объект с пустой id реквизитом: let timeoutProps = { id: null };
    • Примечание : я использую объект здесь, потому что это будет означать [ 1114] переменная является просто указателем на данные {id: null}. Таким образом, его можно изменить в другом месте, и любое будущее использование timeoutProps будет использовать обновленные данные.
  • Далее мы передаем это обратному вызову setTimeout.
    • Примечание : на данный момент обратный вызов не был запущен!
  • Наконец, мы редактируем свойство timeoutProps id to timeoutId
    • Примечание : Поскольку обратный вызов setTimeout все еще не был запущен, переменная timeoutProps теперь указывает на обновленные данные {id: timeoutId}
  • После запуска обратного вызова setTimeout, setTimeout теперь будет иметь доступ к {id: timeoutId} и сможет передавать timeoutId в removeElem. 1136]

Надеюсь, это имеет смысл? Это одна из самых запутанных (и забавных) вещей в Javascript: D С удовольствием объясню больше, если это необходимо.

7
задан GEOCHET 20 February 2009 в 00:40
поделиться

3 ответа

System.getProperty("user.home") +File.separator + "Документы";

И не волнуйтесь о с локализацией, посмотрите:

macb:Documents laullon$ pwd
/Users/laullon/Documents

Мой OS X находится на испанском языке.

8
ответ дан 6 December 2019 в 11:53
поделиться

Вы хотите использовать eio Apple. Расширение FileManager:

    static public String documentsDirectory()
            throws java.io.FileNotFoundException {
        // From CarbonCore/Folders.h
        final String kDocumentsDirectory = "docs";
        return com.apple.eio.FileManager.findFolder(
            com.apple.eio.FileManager.kUserDomain,
            com.apple.eio.FileManager.OSTypeToInt(kDocumentsDirectory)
        );
    }

Документация

9
ответ дан 6 December 2019 в 11:53
поделиться

На Mac (насколько я знаю всех недавних 10.x варианты) каталог "My Documents" расположен в (от корня):
/ Пользователи / <имя пользователя> / Документы
Таким образом это находится в подкаталоге "Документов" в рамках корневого каталога для пользователя.

0
ответ дан 6 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

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