Zapisywanie plików na Windows 7

0

Do tej pory testowałem swój program na Windows XP i z zapisywaniem na dysk i nie było żadnych problemów. Gdy uruchomiłem program na Windows 7, to podczas próby zapisu wypluwa dwa wyjątki:
java.io.FileNotFoundException: C:\Hands.png (Odmowa dostępu)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(Unknown Source)
at java.io.RandomAccessFile.<init>(Unknown Source)
at CDownloadAttachments.CreateRandomAccessFile(CDownloadAttachments.java:304)
at CDownload$6.actionPerformed(CDownload.java:675)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at CDownloadAttachments.CreateRandomAccessFile(CDownloadAttachments.java:311)
at CDownload$6.actionPerformed(CDownload.java:675)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

W tych dwóch linijkach ma taki kod:
304 linia - raf_file_tab[i] = new RandomAccessFile(folder_path + file_name, "rw");
311 linia - raf_file_tab[i].setLength(file_size_in_bytes);

raf_file_tab to tablica zmiennych typu RandomAccessFile

Z Windowsem 7 nie miałem do tej pory do czynienia, ale wydaje mi się, że pozwala on bezproblemowo zapisywać programom tylko do jednego katalogu użytkownika.

Jak sobie z tym poradzić?
Pierwsza rzecz - jak to wykryć? Wydaje mi się, że albo po prostu obsłużyć ten wyjątek, albo nie dopuścić do jego wykonania wykrywając, że to Windows 7?
Druga rzecz - gdy już to wykryję, to jak poinformować użytkownika, o tym nie praw dostępu do tego folderu i żeby zapisał w innym folderze? Wyświetlić jakieś okno dialogowe do zmiany katalogu?

Trzeba to samemu implementować, czy może Java ma jakieś mechanizmy wspierające zapisywanie plików w Windows 7?

1

No bo zapisujesz w katalogu głównym a to jest zabronione. Spróbuj do dowolnie innego a nie będziesz miał problemu np. C:/test/Hands.png

1

Nie powinienes imho starac sie tego wykrywac - kazdy system ma jakies swoje zasady. Najlepiej po prostu probuj zapisac, a jak poleci wyjatek to go zlap i powiedz ze nie mozna zapisac bo costam.

0

Macie racje - zapisałem innym programem i wszędzie się dało oprócz bezpośrednio w katalogu głównym.
Niestety w moim programie gdziekolwiek był nie zapisywał to są te same 2 wyjątki. Program mógł zapisać tylko na Pendrive, ale nigdzie na HDD się nie dało.
Co więc może być źle? Dodam, że na Windows XP mój program nie ma żadnych problemów z zapisem piku - problem jest na Windows 7.

0

Wyjaśniło się błąd był po stronie mojego programu. Naprawiłem i teraz wszystko jest jak trzeba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1