// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= DevFaqImplementFilesystem
:jbake-type: wiki
:jbake-tags: wiki, devfaq, needsreview
:jbake-status: published
:keywords: Apache NetBeans wiki DevFaqImplementFilesystem
:description: Apache NetBeans wiki DevFaqImplementFilesystem
:toc: left
:toc-title:
:syntax: true

=== I'm having trouble implementing this filesystem....

Be sure that what you really want to be doing is implement link:http://www.netbeans.org/download/dev/javadoc/org-openide-filesystems/org/openide/filesystems/FileSystem.html[FileSystem].  Unless you really need to access objects in a database, remote server, or some other such storage as if they were files, you are probably heading in the wrong direction.

If you do need to implement a FileSystem, you should probably start with link:http://www.netbeans.org/download/dev/javadoc/org-openide-filesystems/org/openide/filesystems/AbstractFileSystem.html[AbstractFileSystem] - it handles a lot of knotty locking semantics correctly and will save you a lot of time, effort and bugs.

=== Apache Migration Information

The content in this page was kindly donated by Oracle Corp. to the
Apache Software Foundation.

This page was exported from link:http://wiki.netbeans.org/DevFaqImplementFilesystem[http://wiki.netbeans.org/DevFaqImplementFilesystem] , 
that was last modified by NetBeans user Admin 
on 2009-11-06T15:46:54Z.


*NOTE:* This document was automatically converted to the AsciiDoc format on 2018-02-07, and needs to be reviewed.
