An in-memory file system for Java 7+

Related tags

Miscellaneous jimfs
Overview

Jimfs

Jimfs is an in-memory file system for Java 7 and above, implementing the java.nio.file abstract file system APIs.

Build Status Maven Central

Getting started

The latest release is 1.2.

It is available in Maven Central as com.google.jimfs:jimfs:1.2:

<dependency>
  <groupId>com.google.jimfs</groupId>
  <artifactId>jimfs</artifactId>
  <version>1.2</version>
</dependency>

Basic use

The simplest way to use Jimfs is to just get a new FileSystem instance from the Jimfs class and start using it:

import com.google.common.jimfs.Configuration;
import com.google.common.jimfs.Jimfs;
...

// For a simple file system with Unix-style paths and behavior:
FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
Path foo = fs.getPath("/foo");
Files.createDirectory(foo);

Path hello = foo.resolve("hello.txt"); // /foo/hello.txt
Files.write(hello, ImmutableList.of("hello world"), StandardCharsets.UTF_8);

What's supported?

Jimfs supports almost all the APIs under java.nio.file. It supports:

  • Creating, deleting, moving and copying files and directories.
  • Reading and writing files with FileChannel or SeekableByteChannel, InputStream, OutputStream, etc.
  • Symbolic links.
  • Hard links to regular files.
  • SecureDirectoryStream, for operations relative to an open directory.
  • Glob and regex path filtering with PathMatcher.
  • Watching for changes to a directory with a WatchService.
  • File attributes. Built-in attribute views that can be supported include "basic", "owner", "posix", "unix", "dos", "acl" and "user". Do note, however, that not all attribute views provide useful attributes. For example, while setting and reading POSIX file permissions is possible with the "posix" view, those permissions will not actually affect the behavior of the file system.

Jimfs also supports creating file systems that, for example, use Windows-style paths and (to an extent) behavior. In general, however, file system behavior is modeled after UNIX and may not exactly match any particular real file system or platform.

License

Copyright 2013 Google Inc.

Licensed 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.
Comments
  • Throw UOE when setting unsupported attributes

    Throw UOE when setting unsupported attributes

    This commit modifies the behavior when setting unsupported attributes to throw an UnsupportedOperationException instead of an IllegalArgumentException. This is to make JimfsFileSystemProvider#createDirectory and JimfsFileSystemProvider#newByteChannel behave consistently with the Javadocs for FileSystemProvider#createDirectory and FileSystemProvider#newByteChannel which require an UnsupportedOperationException to be thrown when the array of attributes contains attributes which can not be set. In particular, these methods are invoked via Files#createDirectory, Files#createTempDirectory and Files#createFile which have the same requirement regarding throwing an UnsupportedOperationException when the array of attributes contains attributes which can not be set. Most notably, this causes a discrepancy between the handling of Jimfs when configured to act like a Windows filesystem versus the behavior of sun.nio.fs.WindowsFileSystem where the former will throw an IllegalArgumentException if an attempt is made to set a POSIX attribute but the latter will throw an UnsupportedOperationException (consistent with the Javadocs).

    cla: yes 
    opened by jasontedor 11
  • Add Turkish path normalization

    Add Turkish path normalization

    We use jimfs in the Buck project (https://github.com/facebook/buck/) for a number of our unit tests.

    I was fixing some i18n bugs in Buck when I noticed there was no ability to create a filesystem using Turkish normalization rules. This pull request fixes the TODO in PathNormalization and adds a few tests.

    I didn't handle regular expression matching yet, since there doesn't seem to be a way to create a Java regular expression using Turkish case-insensitive rules.

    I also tidied up a switch statement in Configuration to raise a compiler error if anyone else adds a new enum value to PathNormalization (I was tripped up by this initially since we had a default case which raised a runtime error for new enum values).

    Note: I work for Facebook, but we've already signed the Google corporate CLA. I got approval from our Open Source team to send in this pull request.

    cla: yes 
    opened by bhamiltoncx 11
  • ClassLoader issues with Jimfs.newFileSystem

    ClassLoader issues with Jimfs.newFileSystem

    It looks like there are problems using Jimfs in an environment where user and system code are loaded by separate classloaders. In that case, JimfsFileSystemProvider will be loaded and initialized by the system classloader (because of the META-INF/services entry), while a user who wants to create a file system by calling Jimfs.newFileSystem will be using classes loaded by a different classloader.

    The problem is that to create a FileSystem instance, Jimfs calls FileSystems.newFileSystem(...), passing it an environment map containing the Configuration object to be used to configure the file system. When the JimfsFileSystemProvider instance loaded by the system classloader gets this object, it doesn't recognize it as an instance of Configuration, because it was loaded by a different classloader. This leads to an error like:

    env map ({config=com.google.common.jimfs.Configuration@15b71125}) must contain key 'config' mapped to an instance of Jimfs.Configuration

    Why do we do it this way in the first place? We want to call FileSystems.newFileSystem so that the canonical (system-loaded) JimfsFileSystemProvider instance is used to create (and more importantly, cache) the file system. This is necessary for methods like Paths.get(URI) to work, as it will go to that FileSystemProvider instance and ask it to resolve the URI to a Path. If it doesn't have the FileSystem instance cached, it won't be able to find it and get a Path from it.

    Some possible solutions (and the problems with them):

    1. Change the environment map that's passed to FileSystems.newFileSystem to only contain standard JDK types. This should solve the classloader issues.
      • Problem: While most of the Configuration object could be converted to a map of standard JDK types, there are a couple things that cannot, specifically the PathType and the set of AttributeProviders the file system should use. It's possible (though it would require changing the API) that we could change the configuration from storing instances of these types to storing only the classes (requiring a default constructor or some such), in which case we could put the names of the classes into the map to be loaded and instantiated by the FileSystemProvider.
      • Even if we did this, though, there are still potential problems if, say, an AttributeProvider deals with attributes whose values are not standard JDK classes--the could be problems when a user tries to set an attribute value on a file and the AttributeProvider doesn't see it as the same class (due to the classloader issues).
    2. Stop using FileSystems.newFileSystem to create Jimfs file systems. Use a locally initialized instance of JimfsFileSystemProvider instead. This solves the problem because only the user code classloader should be involved.
      • Problem: It's no longer possible to get a Jimfs Path or FileSystem by its URI using the standard methods in the java.nio.file API. This also prevents things like the recently-added support for Jimfs URLs from working.
    3. Try to work around this by making the system-loaded FileSystemProvider for Jimfs not be the real JimfsFileSystemProvider.
      • Rather, it would just be used for caching FileSystem instances as needed for URI-based methods to work.
      • The real JimfsFileSystemProvider would be a singleton, and Jimfs would use that to create a FileSystem instance when Jimfs.newFileSystem is called. It would then pass the created FileSystem itself as a value in the environment map to FileSystems.newFileSystem, allowing the new FileSystem to be cached. Since FileSystem is a JDK type and since the system-loaded FileSystemProvider has no reason to care about any details beyond that, it should have no problem with the FileSystem coming from a different classloader.
      • Since the FileSystemProvider that created the FileSystem will be the one that handles implementing all the methods for it, there should be no issues with the FileSystem functionality.

    I think approach 3 should work, but still need to confirm that. It's fairly gross, but should be transparent as long as people are using the API as expected.

    type=defect fixed 
    opened by cgdecker 10
  • Allow to set JimfsFileSystemProvider as DefaultFileSystemProvider

    Allow to set JimfsFileSystemProvider as DefaultFileSystemProvider

    In production code I use the static factory methods of nio.file.Paths to create Path objects. The nio.file.Paths utility class uses the default Filesystem.

    In my test code I would like to change the default file system, which can be done by setting the system property java.nio.file.spi.DefaultFileSystemProvider. However, in order for this to work, the provider class needs to have a one argument constructor whose formal parameter type is FileSystemProvider. Since JimfsFileSystemProvider doesn't have such a constructor and I can't extend the class (marked as final), I can't make FileSystems.getDefault() return a Jimfs file system.

    type=enhancement wontfix 
    opened by sherter 10
  • Make polling frequency in PollingWatchService configurable

    Make polling frequency in PollingWatchService configurable

    The WatchService implementation in PollingWatchService uses a hard coded polling frequency (5 seconds). Currently I need to sleep relatively long in my tests in order to receive the event. It would be nice if this could be configured at file system creation time (e.g. by adding something to Configuration.builder()).

    type=enhancement fixed 
    opened by sherter 9
  • Allow creation of Links from other File Systems

    Allow creation of Links from other File Systems

    Hi all, we are trying to use JimFS as a Virtual File System, using it to create a directory structure, and store Symbolic Links to Files that reside on other File Systems.

    We work with very large files and don't have the memory capacity to store these files in memory unfortunately.

    Trying to do this, we receive the error "path is not associated with a Jimfs file system" at com.google.common.jimfs.JimfsFileSystemProvider.checkPath(JimfsFileSystemProvider.java:130) at com.google.common.jimfs.JimfsFileSystemProvider.createLink(JimfsFileSystemProvider.java:231) at java.nio.file.Files.createLink(Files.java:1086)

    opened by wodencafe 8
  • Interrupt behaviour deviations

    Interrupt behaviour deviations

    The methods bellow deviate from the default FileSystem implementation in their behaviour to interrupts. If a thread is interrupted when or "while" calling these methods, then the method must throw a ClosedByInterruptException and the channel must be closed:

    • FileChannel.position(long)
    • FileChannel.position()
    • FileChannel.size()
    • FileChannel.force(boolean)

    There might be other methods that deviate besides these, but these are the ones that my tests caught. Correct interrupt behaviour is important to me, because my code needs to correctly cope with stray interrupts, which I obviously have to test for.

    type=enhancement fixed 
    opened by chrisvest 8
  • Files.list returns an entry which is then declared to not exist

    Files.list returns an entry which is then declared to not exist

    Consider the following code:

    try (FileSystem jimFs = Jimfs.newFileSystem(Configuration.unix())) {
    	final Path workDir = jimFs.getPath("");
    	Files.createFile(workDir.resolve("file1.txt"));
    	final Path entry = Files.list(workDir).collect(MoreCollectors.onlyElement());
    	LOGGER.info("Entry: {}, abs: {}, exists: {}, exists as abs: {}.", entry, entry.toAbsolutePath(), Files.exists(entry), Files.exists(entry.toAbsolutePath()));
    }
    

    It prints: Entry: /file1.txt, abs: /work/file1.txt, exists: false, exists as abs: true.

    I think that the entry name /file1.txt is incorrect. This seems to designate an absolute path, whereas a relative path is expected here (relative to the work dir). A bigger problem (maybe caused by the previous one) is that Files.exists reports this entry to not exist. Whereas the same entry is reported to exist when using its absolute form. Whether a file exists should not depend on the form of its path, and this entry does exist, in any case.

    type=defect fixed P2 
    opened by oliviercailloux 7
  • `Files.newOutputStream(path, CREATE, TRUNCATE_EXISTING)` does not truncate the existing file

    `Files.newOutputStream(path, CREATE, TRUNCATE_EXISTING)` does not truncate the existing file

    Hi there,

    I've found a bug in this library.

    When using the Files..newOutputStream(path, CREATE, TRUNCATE_EXISTING) method the existing files are not truncated (see the failing unit test in the first commit).

    I'd be very happy if you could merge and release this fix, 'cause I have to use some workarounds at the moment.

    Thanks, Vilmos

    cla: yes 
    opened by vilmosnagy 7
  • Add a means to convert a URI to a JimfsPath

    Add a means to convert a URI to a JimfsPath

    There is no obvious way to convert a URI into a JimfsPath. Normally, one could use fs.provider().getPath(uri), but this is not implemented by JimfsFileSystemProvider; instead, it throws an exception stating:

    This method should not be called directly; use Paths.get(URI) instead.

    Which is funny, since on #12 @cgdecker (main contributor to the project?)

    strongly recommends not using Paths.get

    I would've used JimfsFileSystem.toPath(URI), but the entire class is set to the package-private access modifier (why the hell?).

    opened by eyalroth 7
  • PathMatcher does not respect pathEqualityUsesCanonicalForm setting

    PathMatcher does not respect pathEqualityUsesCanonicalForm setting

    I'm writing a test by emulating a windows file system like so:

    Configuration.windows().toBuilder().setRoots("C:\\").build()
    

    The built-in windows configuration has the right settings for case sensitivity:

    .setNameCanonicalNormalization(CASE_FOLD_ASCII)
    .setPathEqualityUsesCanonicalForm(true) // matches real behavior of WindowsPath
    

    However, the following matcher does not accept files having a TXT extension: fileSystem.getPathMatcher("glob:**.txt")

    Looking into the implementation, it seems like the GlobToRegex class should check the actual normalization settings.

    type=defect fixed P2 
    opened by b4rd 5
  • Files#readAttributes throws NullPointerException for non existent attribute view.

    Files#readAttributes throws NullPointerException for non existent attribute view.

    Files#readAttributes throws a NullPointerException for a nonexistent attribute view, but according to Javadoc, it should throw an UnsupportedOperationException.

    Test case:

    public static void main(String... args) throws IOException {
            try (java.nio.file.FileSystem nioFs1 = Jimfs.newFileSystem()) {
                Path test = nioFs1.getPath("test");
                Files.createFile(test);
                Files.readAttributes(test, "nonexistview:*");
            } catch (UnsupportedOperationException unsupported) {
                // expected
            }
        }
    
    type=defect P3 
    opened by tzezula 0
  • Bump maven-compiler-plugin from 3.8.1 to 3.10.1

    Bump maven-compiler-plugin from 3.8.1 to 3.10.1

    Bumps maven-compiler-plugin from 3.8.1 to 3.10.1.

    Release notes

    Sourced from maven-compiler-plugin's releases.

    3.10.1

    🚀 New features and improvements

    🐛 Bug Fixes

    📦 Dependency updates

    Other contributions

    3.10.0

    🚨 Removed

    🚀 New features and improvements

    🐛 Bug Fixes

    📦 Dependency updates

    📝 Documentation updates

    🔧 Build

    ... (truncated)

    Commits
    • 4e08e2b [maven-release-plugin] prepare release maven-compiler-plugin-3.10.1
    • 6795b0f [MCOMPILER-426] add flag to enable-preview java compiler feature (#98)
    • 1de8c91 MCOMPILER 346 workaround to jdk bug: assertion error from javaxcompiler javax...
    • 96ed94f use shared release drafter
    • fa80028 [MCOMPILER-485] Fixes internal string format in generated package-info.class ...
    • f605c0f Merge pull request #94 from apache/dependabot/maven/org.apache.maven.plugins-...
    • 4a54a9a Bump maven-javadoc-plugin from 3.3.1 to 3.3.2
    • 87b5a7f [maven-release-plugin] prepare for next development iteration
    • f4239a4 [maven-release-plugin] prepare release maven-compiler-plugin-3.10.0
    • fda9729 fix typo gtrhhhrhr
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    P3 dependencies java 
    opened by dependabot[bot] 1
  • FileStore.getBlockSize() should return the configuration block size

    FileStore.getBlockSize() should return the configuration block size

    The following test case fails for some reason.

      @Test
      void test() throws IOException {
        var blockSize = 1 << 12;
        var configuration = Configuration.unix().toBuilder().setBlockSize(blockSize).build();
        var fs = Jimfs.newFileSystem(configuration);
        var path = fs.getPath("/home/test/test.txt");
        var store = Files.getFileStore(path);
        assertThat(store.getBlockSize()).isEqualTo(blockSize);
      }
    

    I'm explicitly setting the block size, but I get an IOException when the test case is run:

    java.lang.UnsupportedOperationException
            at java.base/java.nio.file.FileStore.getBlockSize(FileStore.java:158)
            ...
    

    I would expect the store to return the block size instead.

    type=defect P4 
    opened by ogregoire 1
  • Add Automatic-Module-Name to JAR to provide JDK-9 support.

    Add Automatic-Module-Name to JAR to provide JDK-9 support.

    Any builds on JDK-9 or newer that use modules and have this dependency will currently produce a warning:

    Required filename-based automodules detected: [jimfs-1.2.jar]. Please don't publish this project to a public artifact repository!
    

    This should address that issue. For all other purposes this JAR appears to work fine in Java 9 and newer (I am currently using it for a JDK-17-based project).

    P3 type=other 
    opened by ascopes 3
  • Sensless feedback loop

    Sensless feedback loop

    JimfsFileSystemProvider#getFileSystem(URI) and JimfsFileSystemProvider#getPath(URI) just throw exceptions telling you to use FileSystems.getFileSystem(URI) and Paths.get(URI) respectively, but those recommended methods just fall back on calling these ones that throw unconditional exceptions.

    Expectation:

    You call Paths.get(URI) where the URI has a jimfs scheme and you get a Path object.

    Reality:

    You get an exception saying This method should not be called directly; use Paths.get(URI) instead.

    type=defect P3 
    opened by coladict 1
Releases(v1.2)
  • v1.2(Jan 5, 2021)

    Maven dependency:

    <dependency>
      <groupId>com.google.jimfs</groupId>
      <artifactId>jimfs</artifactId>
      <version>1.2</version>
    </dependency>
    

    Javadoc for the release can be viewed at: http://google.github.io/jimfs/releases/1.2/api/docs/ API diffs between Jimfs 1.1 and this release can be viewed at: http://google.github.io/jimfs/releases/1.2/api/diffs/

    What's new in 1.2

    • Various bug fixes.
    Source code(tar.gz)
    Source code(zip)
  • v1.1(Feb 12, 2016)

    Jimfs 1.1 final release.

    Maven dependency:

    <dependency>
      <groupId>com.google.jimfs</groupId>
      <artifactId>jimfs</artifactId>
      <version>1.1</version>
    </dependency>
    

    Javadoc for the release can be viewed at: http://google.github.io/jimfs/releases/1.1/api/docs/ API diffs between Jimfs 1.0 and this release can be viewed at: http://google.github.io/jimfs/releases/1.1/api/diffs/

    This release contains no changes from 1.1-rc1.

    What's new in 1.1

    • Now possible to configure the rate at which a WatchService polls by calling setWatchServiceConfiguration(WatchServiceConfiguration.polling(interval, timeUnit)) when building a Configuration. (#14)
    • Now possible to get the default Configuration (based on the current operating system) that is used when calling the Jimfs factory methods that do not take a Configuration parameter, via Configuration.forCurrentPlatform(). Mainly useful if you want to create a slightly modified (e.g. with a different WatchService polling rate) version of that Configuration.
    • URL objects can now be created from Jimfs Paths (using path.toUri().toURL()). Such URLs support reading the contents of the file through an InputStream, with behavior similar to that of a normal file: URL object. (#13)
    • URIs for directories now end in a trailing /. (#16)
    • Fixed an issue with environments where Java SDK code (such as the FileSystems class and by extension the FileSystemProvider implementations it loads as services) and user code (including the Jimfs entry point class) are loaded by different classloaders. (#18)
    Source code(tar.gz)
    Source code(zip)
    jimfs-1.1-javadoc.jar(113.14 KB)
    jimfs-1.1-sources.jar(122.78 KB)
    jimfs-1.1.jar(201.84 KB)
  • v1.1-rc1(Jan 22, 2016)

    First release candidate for Jimfs 1.1.

    Maven dependency:

    <dependency>
      <groupId>com.google.jimfs</groupId>
      <artifactId>jimfs</artifactId>
      <version>1.1-rc1</version>
    </dependency>
    

    Javadoc for the release can be viewed at: http://google.github.io/jimfs/releases/1.1-rc1/api/docs/ API diffs between Jimfs 1.0 and this release can be viewed at: http://google.github.io/jimfs/releases/1.1-rc1/api/diffs/

    What's new in 1.1

    • Now possible to configure the rate at which a WatchService polls by calling setWatchServiceConfiguration(WatchServiceConfiguration.polling(interval, timeUnit)) when building a Configuration. (#14)
    • Now possible to get the default Configuration (based on the current operating system) that is used when calling the Jimfs factory methods that do not take a Configuration parameter, via Configuration.forCurrentPlatform(). Mainly useful if you want to create a slightly modified (e.g. with a different WatchService polling rate) version of that Configuration.
    • URL objects can now be created from Jimfs Paths (using path.toUri().toURL()). Such URLs support reading the contents of the file through an InputStream, with behavior similar to that of a normal file: URL object. (#13)
    • URIs for directories now end in a trailing /. (#16)
    • Fixed an issue with environments where Java SDK code (such as the FileSystems class and by extension the FileSystemProvider implementations it loads as services) and user code (including the Jimfs entry point class) are loaded by different classloaders. (#18)
    Source code(tar.gz)
    Source code(zip)
    jimfs-1.1-rc1-javadoc.jar(113.28 KB)
    jimfs-1.1-rc1-sources.jar(122.78 KB)
    jimfs-1.1-rc1.jar(201.85 KB)
  • v1.0(Jun 16, 2014)

  • v1.0-rc3(Jun 10, 2014)

  • v1.0-rc2(May 23, 2014)

    Second release candidate, containing a number of fixes and usability improvements.

    This release can be used with Maven as:

    <dependency>
      <groupId>com.google.jimfs</groupId>
      <artifactId>jimfs</artifactId>
      <version>1.0-rc2</version>
    </dependency>
    

    Notable changes:

    • FileSystem instances are now cached statically, so even if multiple instances of JimfsFileSystemProvider are created, they'll share the same cache of file systems. This is meant to ensure that what ClassLoader happens to load JimfsFileSystemProvider has no effect on behavior (the provider instance itself is only cached if it can be loaded by the system ClassLoader).
    • FileSystem instances are now cached with weak references, allowing them to be garbage collected when no references remain even if close() has not been called. This is preferable in most cases. The only negative impact is that if you wish to hold on to a URI (either for a FileSystem or a Path in that file system) and later use it to retrieve that FileSystem/Path, it may not work unless you ensure that a strong reference to the FileSystem is held somewhere.
    • Closing a FileSystem now closes all open streams, channels, etc. for that file system and causes most Files methods to throw ClosedFileSystemException.
    • The jar now has OSGi metadata.
    Source code(tar.gz)
    Source code(zip)
    jimfs-1.0-rc2-javadoc.jar(102.33 KB)
    jimfs-1.0-rc2-sources.jar(113.09 KB)
    jimfs-1.0-rc2.jar(187.17 KB)
  • v1.0-rc1(Feb 26, 2014)

Owner
Google
Google ❤️ Open Source
Google
A simple file sharing program

FileSharing A simple file sharing program How to use Place all the files to be shared in /html/files (symbolic links work).

AK 3 May 13, 2021
Serverless Reference Architecture for Real-time File Processing

Serverless Reference Architecture: Real-time File Processing The Real-time File Processing reference architecture is a general-purpose, event-driven,

AWS Samples 436 Oct 7, 2022
Leveraging Java 8, create an API with a multi-tier user system.

Project 0 Description Leveraging Java 8, create an API with a multi-tier user system. You may choose the actual use case for your application as long

null 1 Jan 9, 2022
This is a Blog & Report System with Java, JSP, AJAX

Blog-Report-System-in-Java This is a Blog & Report System with Java, JSP, AJAX Java project based on JDBC, JSP, Java Servlet & Server Deployment Proje

Muhammad Asad 5 Feb 2, 2022
ONLINE DYNAMIC UNIVERSITY VOTING SYSTEM

WEVOTE ONLINE DYNAMIC UNIVERSITY VOTING SYSTEM Online university voting system is developed as a web-based application using html for front-end design

null 3 May 7, 2021
Crackersanimator is a particle system library that works with the standard Android UI

Crackersanimator is a particle system library that works with the standard Android UI. This library build from https://github.com/plattysoft/Leonids library but make some update to support for latest version of android.

null 3 Jun 14, 2022
Modern Java - A Guide to Java 8

Modern Java - A Guide to Java 8 This article was originally posted on my blog. You should also read my Java 11 Tutorial (including new language and AP

Benjamin Winterberg 16.1k Jan 5, 2023
icecream-java is a Java port of the icecream library for Python.

icecream-java is a Java port of the icecream library for Python.

Akshay Thakare 20 Apr 7, 2022
JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface that is bound to the external C library using method names.

JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface t

null 28 Dec 30, 2022
There are two versions of assignments(Java or C++) for the CS143-Compiler course, this repo is my Java-version solution.

Intro There are two versions of assignments(Java or C++) for the CS143-Compiler course, this repo is my Java-version solution. Course resources: This

F4DE 3 Dec 15, 2022
From Java To Kotlin - Your Cheat Sheet For Java To Kotlin

From Java To Kotlin From Java To Kotlin - Your Cheat Sheet For Java To Kotlin 中文支持 Português Español Print to Console Java System.out.print("Amit Shek

MindOrks 5.8k Dec 29, 2022
Ultra-fast SQL-like queries on Java collections

CQEngine - Collection Query Engine CQEngine – Collection Query Engine – is a high-performance Java collection which can be searched with SQL-like quer

Niall Gallagher 1.6k Dec 30, 2022
Design patterns implemented in Java

Design patterns implemented in Java Read in different language : CN, KR, FR, TR, AR Introduction Design patterns are the best formalized practices a p

Ilkka Seppälä 79k Dec 31, 2022
Feature Flags for Java made easy

✨ ✨ ✨ FF4J - Feature Flipping for Java ✨ ✨ ✨ FF4j, is an implementation of the Feature Toggle pattern. ?? Features Feature Toggle: Enable. and disable

FF4j 1.1k Dec 25, 2022
A Java to iOS Objective-C translation tool and runtime.

J2ObjC: Java to Objective-C Translator and Runtime Project site: https://j2objc.org J2ObjC blog: https://j2objc.blogspot.com Questions and discussion:

Google 5.9k Dec 29, 2022
Make Slack and Facebook Bots in Java.

JBot Make bots in Java. JBot is a java framework (inspired by Howdyai's Botkit) to make Slack and Facebook bots in minutes. It provides all the boiler

Ram 1.2k Dec 18, 2022
API gateway for REST and SOAP written in Java.

Membrane Service Proxy Reverse HTTP proxy (framework) written in Java, that can be used as an API gateway as a security proxy for HTTP based integrati

predic8 GmbH 389 Dec 31, 2022
A lightweight, simple FTP server. Pure Java, no dependencies.

MinimalFTP A lightweight, simple FTP server. Pure Java, no libraries. Features Although it's named "minimal", it supports a bunch of features: 100% Ja

Guilherme Chaguri 131 Jan 5, 2023
Detect uses of legacy Java APIs

Modernizer Maven Plugin Modernizer Maven Plugin detects uses of legacy APIs which modern Java versions supersede. These modern APIs are often more per

Andrew Gaul 325 Dec 12, 2022