Оберните свой ZipOutputStream в персонализированный OutputStream, названный здесь YourOutputStream.
ZipOutputStream
(zos2), который обертывает новый ByteArrayOutputStream
(baos) public YourOutputStream(ZipOutputStream zos, int maxSizeInBytes)
YourOutputStream
, он сначала напишет его на zos2 public void writeFile(File file) throws ZipFileFullException
public void writeFile(String path) throws ZipFileFullException
и т. д. . baos.size()
находится под maxSizeInBytes
Записать файл в zos1 Вам нужно два ZipOutputStream, один из которых должен быть записан на вашем диске, чтобы проверить, превышает ли ваше содержимое более 5 МБ.
EDIT: Фактически я проверил, вы не можете легко удалить ZipEntry .
http://download.oracle.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html# размер ()
От этого страница :
(import '(javax.swing JFrame JButton JOptionPane)) ;'
(import '(java.awt.event ActionListener)) ;'
(let [frame (JFrame. "Hello Swing")
button (JButton. "Click Me")]
(.addActionListener button
(proxy [ActionListener] []
(actionPerformed [evt]
(JOptionPane/showMessageDialog nil,
(str "<html>Hello from <b>Clojure</b>. Button "
(.getActionCommand evt) " clicked.")))))
(.. frame getContentPane (add button))
(doto frame
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
.pack
(.setVisible true)))
print("code sample");
И, конечно, на это стоило бы посмотреть совместимость раздел веб-сайта clojure.
Если бы Вы хотите сделать программирование GUI, я указал бы на Температурный Преобразователь или колония муравьев .
Много вещей в Swing сделаны путем разделения на подклассы, особенно при создании пользовательских компонентов. Для этого существует две существенных функции/макросов: прокси и класс генерала .
Теперь я понимаю, куда Вы идете с большим количеством Lispy путем. Я не думаю, что существует что-либо как этот все же. Я категорически не рекомендовал бы попытку создать грандиозное создающее GUI крыло платформы CLIM, но сделать что-то больше Lispy: начните писать Вашему приложению Swing и краткому обзору свои общие шаблоны с макросами. При выполнении этого можно закончить с языком для записи вида графический интерфейсов пользователя, или возможно некоторого очень универсального материала, который может быть совместно использован и вырасти.
Одна вещь Вы проигрываете, когда запись графический интерфейсов пользователя в Clojure является использованием инструментов как Matisse. Это может быть сильным указанием для записи некоторых частей в Java (GUI) и некоторых частей в Clojure (логика). Который на самом деле имеет смысл как в логике, Вы будете в состоянии создать язык для своего вида логики с помощью макросов, и я думаю, что существует больше для получения там, чем с GUI. Очевидно, это зависит от Вашего приложения.
Clojure и SWT являются лучшим подходом для того, чтобы сделать GUI. По существу SWT является подходом стиля Plug and Play для разработки программного обеспечения.
Я разрабатывал апплет Java, в котором все записано в Clojure кроме кода апплета, который написан в Java. Апплет вызывает обратные вызовы кода Clojure init, краски, и т.д. от рычагов Java для тех методов, которые определяются моделью апплета. Таким образом, код заканчивает тем, что был Clojure на 99,999 процентов, и Вы не должны думать о крошечной части Java вообще по большей части.
существуют некоторые недостатки к этому подходу, который я надеюсь обсудить более подробно на Clojure Google Group. Я думаю, что разработчики Clojure должны включать собственный способ создать приложения. В настоящее время можно сделать, любой GUI наполняет Вас как от REPL, но если Вы хотите поставляемое приложение GUI, необходимо записать некоторый Java для вызова кода Clojure. Кроме того, это походит на архитектуру вида Апплета Java сил Вы за пределами большего количества идиоматических лучших практик Clojure, требуя, чтобы Вы использовали изменяемое состояние, и т.д.
, Но также и, я еще не очень далек наряду с Clojure, и могло бы иметь место, что это возможно, и я просто не обнаружил, как сделать это правильно все же.
$data = (array) $data;
– Niklas Modess
7 December 2012 в 02:44
Был разговор о списке рассылки о нескольких Ячейках (а-ля Ячейки Kenny Tilton ) реализации. Это - крутой способ сделать программирование GUI.
Я не думаю, что есть официальная , но лично я хотел бы воспользоваться тем фактом, что я использую один из самых мощных языков в мире, и просто представьте, как будет выглядеть идеальный графический интерфейс:
(form {:title :on-close dispose :x-size 500 :y-size 450}
[(button {:text "Close" :id 5 :on-click #(System/exit 0) :align :bottom})
(text-field {:text "" :on-change #(.println System/out (:value %)) :align :center})
(combo-box {:text "Chose background colour" :on-change background-update-function
:items valid-colours})])
Ваша идея будет отличаться, но, надеюсь, это даст вам какая-то идея.
Вот еще один очень простой пример свинга:
; time for some swing
(import '(javax.swing JFrame JTable JScrollPane))
(import '(javax.swing.table DefaultTableModel))
(let
[frame (JFrame. "Hello Swing")
dm (DefaultTableModel.)
table (JTable. dm)
scroll (JScrollPane. table)]
(doto dm
(.setNumRows 30)
(.setColumnCount 5))
(.. frame getContentPane (add scroll))
(doto frame
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.pack)
(.setVisible true)))
В contrib clojure есть оболочка для MigLayout. Вы также можете взглянуть на эту суть . По сути, я добавляю любой код, который пишу, когда изучаю swing / miglayout.
Пример dsm переписан шепелявым образом с использованием contrib.swing-utils
(ns test
(:import (javax.swing JButton JFrame))
(:use (clojure.contrib
[swing-utils :only (add-action-listener)])))
(defn handler
[event]
(JOptionPane/showMessageDialog nil,
(str "<html>Hello from <b>Clojure</b>. Button "
(.getActionCommand event) " clicked.")))
(let [ frame (JFrame. "Hello Swing")
button (JButton. "Click Me") ]
(add-action-listener button handler)
(doto frame
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.add button)
(.pack)
(.setVisible true)))
Я знаю, что вы намекаете на классические десктопные решения, но Веб довольно хорошо сочетается с клоуром. Я написал полное аудио приложение, где все подключено так, что если вы добавляете музыку в аудио папку, она отражается в web интерфейсе. Просто говорю, что приложение для рабочего стола - это не единственный способ :)
.Стюарт Сьерра недавно опубликовал серию постов в блоге о GUI-разработке с клоуром (и качелями). Начните с этого: http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing